NaoyaFukuma / webserv

This is when you finally understand why a URL starts with HTTP
3 stars 0 forks source link

request parser #43

Closed Chanmachan closed 1 year ago

Chanmachan commented 1 year ago

Overview

Purpose

Task

Break down and manage your tasks.

tomofuji-dev commented 1 year ago

Assert Requestの要件

リクエストラインのチェック:HTTPリクエストはリクエストライン(メソッド、URI、バージョン)から始まります。このラインの形式が正しくない場合(たとえば、スペースで区切られていない、HTTPメソッドが無効、HTTPバージョンがサポートされていないなど)、エラーを返すべきです。

ヘッダーフィールドのチェック:各ヘッダーフィールドは「名前: 値」の形式であるべきです。これに従っていない場合、エラーを返すべきです。また、「hoge:fuga」のような無効なヘッダー名が存在する場合、無視するかエラーを返すかは、サーバーの設定または必要に応じて決定します。

ヘッダーサイズのチェック:特定のサーバーは、ヘッダーのサイズに制限を設けていることがあります。この制限を超える場合、エラーを返すべきです。

コンテンツ長のチェック:「Content-Length」ヘッダーが存在する場合、その値が実際のリクエストボディの長さと一致するか確認するべきです。一致しない場合、エラーを返すべきです。

tomofuji-dev commented 1 year ago

Requestができた段階でAssertを行う(一行ごとにparseしている段階ではAssertを行わない) ただし、リクエストラインについては例外

tomofuji-dev commented 1 year ago

要修正:ParseRequestLineのms_split(spaceの数は厳密に1つと決まっているので、複数のspaceを許容する現在の実装を変更しないといけない)

Chanmachan commented 1 year ago

Transfer-Encordingのフィールドが存在するが、chunkedではない場合はエラー?

<考えてること> Transfer-Encordingが指定されているがchunkedではない->content-lengthは指定されているか見てみる ->つまりどっちも指定されている場合は先にTE(略 を見て、CL(略 があるならそっちで処理 TEしかなかった場合はJudgeする関数でエラーを返してリクエストをエラー状態にする?

Chanmachan commented 1 year ago

content-lengthの最大値は?

Chanmachan commented 1 year ago

cerrnoとりあえずRequest.cppでincludeしてるけどどする?

tomofuji-dev commented 1 year ago

headerの長さ制限について ・現時点での長さ + bufferに溜まった文字数 > 上限ならerrorとする ・一行当たりの長さにも制限をかける https://scrapbox.io/42webserv/HTTP_%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%90%84%E7%A8%AE%E9%95%B7%E3%81%95%E5%88%B6%E9%99%90

Chanmachan commented 1 year ago

Bodyの処理を他のHeaderとかと同じくswitch-caseで処理をすると、CRLFが(本当はあったかもしれないのに)ない状態で1行の処理をしてしまう。ので、Bodyの処理だけ分岐させてSockBuffを渡すようにしているが、綺麗な書き方ではないしHeader,Init,Complete,Errorと同じように処理できるのではないか