diff options
| author | Vincent LE GOFF <g_n_s@hotmail.fr> | 2019-05-23 01:28:03 +0200 |
|---|---|---|
| committer | Bert Belder <bertbelder@gmail.com> | 2019-05-22 16:28:03 -0700 |
| commit | 3cfc1244d8747a869fb370de2d057523852fbea9 (patch) | |
| tree | 6be9d1308fae58b8d843dec01b3080edac9e89c6 /http/server.ts | |
| parent | e2debab359f2e07b6a784fbc50df31e39a4cba29 (diff) | |
http: make server handle bad client requests properly (denoland/deno_std#419)
Original: https://github.com/denoland/deno_std/commit/7620fe1a82ba5694e17d51133d94230b06d1517a
Diffstat (limited to 'http/server.ts')
| -rw-r--r-- | http/server.ts | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/http/server.ts b/http/server.ts index 3886e7672..809cf39ff 100644 --- a/http/server.ts +++ b/http/server.ts @@ -197,7 +197,7 @@ export class ServerRequest { } } -async function readRequest( +export async function readRequest( bufr: BufReader ): Promise<[ServerRequest, BufState]> { const req = new ServerRequest(); @@ -235,7 +235,11 @@ export class Server implements AsyncIterable<ServerRequest> { let req: ServerRequest; while (!this.closing) { - [req, bufStateErr] = await readRequest(bufr); + try { + [req, bufStateErr] = await readRequest(bufr); + } catch (err) { + bufStateErr = err; + } if (bufStateErr) break; req.w = w; yield req; @@ -247,7 +251,11 @@ export class Server implements AsyncIterable<ServerRequest> { if (bufStateErr === "EOF") { // The connection was gracefully closed. } else if (bufStateErr instanceof Error) { - // TODO(ry): send something back like a HTTP 500 status. + // An error was thrown while parsing request headers. + await writeResponse(req.w, { + status: 400, + body: new TextEncoder().encode(`${bufStateErr.message}\r\n\r\n`) + }); } else if (this.closing) { // There are more requests incoming but the server is closing. // TODO(ry): send a back a HTTP 503 Service Unavailable status. |
