summaryrefslogtreecommitdiff
path: root/std/http/io.ts
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2020-04-02 15:20:17 -0400
committerGitHub <noreply@github.com>2020-04-02 15:20:17 -0400
commitc8fc29fcca0171166b7093d278bfbe03d970f1a5 (patch)
treea35816104d6ebe94d3c689d212b41fde2fc77aac /std/http/io.ts
parent7a9273d9cfa8736575317bb3cc9465e07ed4ed18 (diff)
Revert "Respond with 400 on request parse failure" (#4593)
readRequest should not write a response. This reverts commit 017a611131a35ccf5dbfce6a2a665fa569e32ec1.
Diffstat (limited to 'std/http/io.ts')
-rw-r--r--std/http/io.ts35
1 files changed, 7 insertions, 28 deletions
diff --git a/std/http/io.ts b/std/http/io.ts
index d16489767..b6bbfa17b 100644
--- a/std/http/io.ts
+++ b/std/http/io.ts
@@ -342,38 +342,17 @@ export function parseHTTPVersion(vers: string): [number, number] {
export async function readRequest(
conn: Deno.Conn,
- // The reader and writer buffers may be constructed externally so they can be
- // shared by requests on the same connection -- see `Server`.
- reader?: BufReader,
- writer?: BufWriter
+ bufr: BufReader
): Promise<ServerRequest | Deno.EOF> {
- reader = reader ?? new BufReader(conn);
- writer = writer ?? new BufWriter(conn);
- const tp = new TextProtoReader(reader);
- let firstLine: string | Deno.EOF;
- let headers: Headers | Deno.EOF;
- try {
- firstLine = await tp.readLine(); // e.g. GET /index.html HTTP/1.0
- if (firstLine == Deno.EOF) {
- return Deno.EOF;
- }
- headers = await tp.readMIMEHeader();
- if (headers == Deno.EOF) {
- throw new Deno.errors.UnexpectedEof();
- }
- } catch (error) {
- // An error was thrown while parsing request headers.
- await writeResponse(writer, {
- status: 400,
- body: encoder.encode(`${error.message}\r\n\r\n`),
- });
- throw error;
- }
+ const tp = new TextProtoReader(bufr);
+ const firstLine = await tp.readLine(); // e.g. GET /index.html HTTP/1.0
+ if (firstLine === Deno.EOF) return Deno.EOF;
+ const headers = await tp.readMIMEHeader();
+ if (headers === Deno.EOF) throw new Deno.errors.UnexpectedEof();
const req = new ServerRequest();
req.conn = conn;
- req.r = reader;
- req.w = writer;
+ req.r = bufr;
[req.method, req.url, req.proto] = firstLine.split(" ", 3);
[req.protoMinor, req.protoMajor] = parseHTTPVersion(req.proto);
req.headers = headers;