以下のメッセージを削除します。


[2241] Re:P.17:終了のマークとして0を送付について
返信


投稿者:(ぱ)こと管理人
2020/10/20 23:13:34

Link:
>大分時間が経ってしまいましたが、回答は理解できました。

おひさしぶりです。反応が遅くなりましてすみません。

>一方で、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

パスワード:

管理者削除