K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2241] Re:P.17:終了のマークとして0を送付について
投稿者:(ぱ)こと管理人
2020/10/20 23:13:34

>大分時間が経ってしまいましたが、回答は理解できました。 おひさしぶりです。反応が遅くなりましてすみません。 >一方で、Server側をApacheに置き換えたとき、Clientからの送信終了を表す”0”は >不要になっています(P.27)。Apacheは何をもってClientがリクエストを送り終えたことを >判断しているのでしょうか? TcpServer.javaのような手抜きプログラムとは違い、ApacheはまともなWebサーバなので、 HTTPリクエストを解釈できます。HTTPリクエストは、p.24のリスト1-7にあるとおり、 GETの場合は(普通は)ボディはつかないので空行で終わります。よって、 空行でリクエストの終わりを判定することができます。この本で作っている 簡易WebサーバModoki01.java(リスト1-16)では、実際そのようにしてリクエストの 終わりを判定しています(59行目)。 POSTの場合はボディが付くので、Content-Lengthヘッダのサイズを使います。 この本ではリスト3-17の66行目でContent-Lengthを取得し、69行目のreadToSize()の 呼び出しでそのサイズだけ読み込んでいます。 ――というのは実はHTTP1.0相当の、簡易版の実装で、HTTP1.1では サーバはGETメソッドでもボディを受け取ることが可能でなければならず(そして 無視しなければならず)、POSTメソッドでもContent-Lengthは必須ではありません。 動的にデータを作りながら連続して送るとき、ヘッダの時点ではサイズを確定できない、 という事情があるわけですが、それを受け取るのは本書の(かつ私の能力の)範囲を 越えます。 興味があれば以下を参照ください(RFC2616なので微妙に古いですが問題ないでしょう)。 https://triple-underscore.github.io/rfc-others/RFC2616-ja.html#section-4.4
[この投稿を含むスレッドを表示] [この投稿を削除]