1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-01 09:24:20 -04:00
denoland-deno/std/http
Bartek Iwańczuk 3ef34673c9
std(http/server): close open connections on server close (#3679)
Due to structure of "Server" for each open connection there's a pending "read" op. Because connection owned by "Server" are not tracked, calling "Server.close()" doesn't close open connections.

This commit introduces simple tracking of connections for server and ensures owned connections are closed on "Server.close()".
2020-03-19 16:04:26 +01:00
..
testdata fix(file_server): don't crash on "%" pathname (#3953) 2020-02-11 15:53:09 -05:00
cookie.ts Enable TS strict mode by default (#3899) 2020-02-19 15:36:18 -05:00
cookie_test.ts refactor(std/http): move io functions to http/io.ts (#4126) 2020-02-26 10:48:35 -05:00
file_server.ts refactor: add no-return-await lint rule (#4384) 2020-03-16 10:22:16 +01:00
file_server_test.ts feat: Deno.test() sanitizes ops and resources (#4399) 2020-03-18 19:25:55 -04:00
http_bench.ts feat: Deno.args now does not include script (#3628) 2020-01-09 11:37:01 -07:00
http_status.ts Happy new year! (#3578) 2020-01-02 15:13:47 -05:00
io.ts fix(std): Use Deno.errors where possible. (#4356) 2020-03-13 21:40:13 -04:00
io_test.ts fix(std): Use Deno.errors where possible. (#4356) 2020-03-13 21:40:13 -04:00
mock.ts refactor(std/http): move io functions to http/io.ts (#4126) 2020-02-26 10:48:35 -05:00
mod.ts feat: Add missing mod.ts files in std (#3509) 2019-12-20 15:21:30 -05:00
racing_server.ts fix: [http] Consume unread body and trailers before reading next request (#3990) 2020-02-24 22:49:39 -05:00
racing_server_test.ts feat: Deno.test() sanitizes ops and resources (#4399) 2020-03-18 19:25:55 -04:00
README.md std/http: allow response body to be string (#3705) 2020-01-17 18:44:35 -05:00
server.ts std(http/server): close open connections on server close (#3679) 2020-03-19 16:04:26 +01:00
server_test.ts std(http/server): close open connections on server close (#3679) 2020-03-19 16:04:26 +01:00

http

import { serve } from "https://deno.land/std/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}

File Server

A small program for serving local files over HTTP

deno --allow-net --allow-read https://deno.land/std/http/file_server.ts
> HTTP server listening on http://0.0.0.0:4500/

Helper to manipulate Cookie through ServerRequest and Response.

import { ServerRequest } from "https://deno.land/std/http/server.ts";
import { getCookies } from "https://deno.land/std/http/cookie.ts";

let request = new ServerRequest();
request.headers = new Headers();
request.headers.set("Cookie", "full=of; tasty=chocolate");

const cookies = getCookies(request);
console.log("cookies:", cookies);
// cookies: { full: "of", tasty: "chocolate" }

To set a Cookie you can add CookieOptions to properly set your Cookie

import { Response } from "https://deno.land/std/http/server.ts";
import { Cookie, setCookie } from "https://deno.land/std/http/cookie.ts";

let response: Response = {};
const cookie: Cookie = { name: "Space", value: "Cat" };
setCookie(response, cookie);

const cookieHeader = response.headers.get("set-cookie");
console.log("Set-Cookie:", cookieHeader);
// Set-Cookie: Space=Cat

Deleting a Cookie will set its expiration date before now. Forcing the browser to delete it.

import { Response } from "https://deno.land/std/http/server.ts";
import { delCookie } from "https://deno.land/std/http/cookie.ts";

let response: Response = {};
delCookie(response, "deno");

const cookieHeader = response.headers.get("set-cookie");
console.log("Set-Cookie:", cookieHeader);
// Set-Cookie: deno=; Expires=Thus, 01 Jan 1970 00:00:00 GMT

Note: At the moment multiple Set-Cookie in a Response is not handled.