RFC読めよ HTTPのやつだけで良いから
>>951 え〜っと、ちょっと今はプログラムを組んでいないので検証していませんが、
recvの返値を加算していって、受信したデータ量とContent-Lengthの
送信データ量が同じになったらrecvしないようにするのが吉だと思います。
>>950 HTTP/1.1になったときだよ。HTTP/0.9にはステータスコード自体なかった
>952 助言に従いRFC2068邦訳版を読んでみました(関係ありそうなところだけですが) >>要求の中でのメッセージ本体の存在は,要求のメッセージヘッダの中にContent-Length又 >>はTransfer-Encodingのヘッダフィールドを含むことによって通知される。 という文を読む取ることができましたが、先の例のとおり Content-Length 自体が3回目の recvで得られますので、それまでは本体の存在がわかりません。 これは Method が POST であれば、メッセージ本体があると信じて recv しにいくと 言うことでよいのでしょうか?
3回目のrecvとか、recvしにいくとか関係ないだろ。 バイトストリームで \r\n\r\n が来るまでがヘッダ。
某プロクシ経由でときどきリダイレクトが失敗してたのだが、そいつは
どうやら1回のrecvでレスポンスヘッダをすべて受信できると決めつけていたらしい。
その後プロクシを自作してみてわかった。もちろん自作のやつは
>>956 のようにしてる。
ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
超有名どころ)考慮せざるを得なかったが
>956 ありがとうございます。 なんか色々迷走しちゃいましたが、けっきょくは\r\n\r\nまで読んで、 そこに Content-Length が含まれていれば、メッセージ本体を 取りにいくというようにしました。 いや、そんな真面目に実装する気は無かったんですが(ただの個人使用のユーティリティなんで) 有用なお話が聞けてよかったです。
プロトコルがどうこう言う前のSocketの話だな
>>957 > ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
> 超有名どころ)考慮せざるを得なかったが
head ブロックの改行コードが全て LF ?
(CR なら1文字先読み LF で改行確定 || LF なら改行確定) のような処理になるんかな
そういえば昔 yahoo が lf だけで改行というヘッダを送ってきていたことがあったな・・・
>>960 Amazonとか楽天、Yahooくらいに有名なところで(何処だったか忘れた)
改行コードが全部LFと言うのを見たことがある。
その時は知識がなく、そんなものだと思っていた。
そのおかげで当時の自分のシステムが全部改行コードをLFだけに
してしまった。
>>961 ,962
PGP/MIME で同じように CRLF/LF 問題で嵌ったことあるけど、
HTTP でそういうことがあるのか…
昔http proxy書いてたとき、改行がCRだけのサーバーにも遭遇したよ。 だからCR/LF/CRLFの3種類全部対応するはめになった
受け入れは緩く、出すものは厳しく
つーか、書いてあるけどな、HTTPのRFCにも。
て言うか、ネットワークの基本だろ
>>965 それ以前に、会話の基本だったりするが...。
女の子は出すのも受け入れるのもガード固いほうがいいよね
>>967 改行はCRLFにする事って読んだ事はある。
CRやLFの奴もあるから注意と書かれているのでしょうか?
いや、マジ教えて。
3.7.1 Canonicalization and Text Defaults
VC2005でソケットを若干使っています スレッドでaccept関数を呼んでいるのですが、 プログラム終了時にスレッドを終了させたいと思っています。 その場合、acceptを終了させるにはどうしたら良いのでしょうか?
winsockなら、acceptしているリスニングソケットを閉じれば抜けられる
>>973 なるほど、ありがとうございました。試してみます。
975 :
580 :2007/02/06(火) 22:02:22
>>970 HTTPでLFなんてないよ。エンティティボディ内は自由というだけ。
19.3 Tolerant Applications ... >The line terminator for message-header fields is the sequence CRLF. >However, we recommend that applications, when parsing such headers, >recognize a single LF as a line terminator and ignore the leading CR.
>>971 それはメディアタイプ"text"のボディの話でヘッダには適用されない。むしろ
> a bare CR
> or LF MUST NOT be substituted for CRLF within any of the HTTP control
> structures (such as header fields and multipart boundaries).
とか書かれてるぞ。アマゾンアソシエイトが全滅しても弾かなくちゃいけないらしい
いまどきはあまり寛容に作りすぎるとHTTP Response Splittingとか HTTP Request Smugglingとかで足元をすくわれかねないし。
979 :
デフォルトの名無しさん :2007/02/06(火) 22:57:36
>>977 パースじゃなく生成しちゃだめって意味なのかな?
>>979 プロトコルとしては、ヘッダの改行は必ずCRLF。それ以外はダメ。
高可用アプリケーションは、それ以外が送られてきても受け付けるべき。
と書かれている。
CR,CRLF,LFはそういう環境のPCがあるからありうる可能性もある。 HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、 LFCRという腐った物を送りつけるものもある。
ヘッダにPCの環境とかふつー関係ないけど > HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、 HTTPでもhtmlの途中で改行の種類が変わるとかふつーにあるぞ。 ユーザーがアップロードしたhtmlと埋め込まれた広告で改行の種類が違うとか。
htmlの中の話なんてどうでもいいんだ。プロトコルの話をしてるんだ。
>>971 にあるようにエンティティボディもプロトコルの一部
>>981 そういうのもあるんだ。
CR LF x [2nd char]
CR 2 1 1
LF 1 2 1
改行個数がこうなるわけね。
>>975 section 3 は entity body と関係ないよ。
結局CR,LF,CRLFをパースできて、CRLFを生成すればOK?
LFCRもな
途中でコード切り替わりもありえるだと 1改行→CRLF 固定 1改行→CR (コード切り替わりに続いて) 1改行→LF とかの区別つかないのか。 後者の改行1つロストされるのはしかたないよね…
そろそろ次スレを
関連リンクは
>>3-6 のままでいいですか?
C++でssh通信を行いたいのですが、そのようなライブラリはありませんか?
>>990 etherealはテンプレから消したほうがいい。
両方書いておけばいい。
出たよ、問題先送り野郎。 「Yes? or NO?」 「あ、あうぁぅ・・・ い・・・の・・・ ぉ、ぉ、オア!」 って感じだなオイ
996 :
デフォルトの名無しさん :2007/02/09(金) 00:27:45
>>995 「あんど」という解決を思いつけないのか。
問題先送り野郎といって安堵しているんじゃねぇ。
松竹梅
EtherealってWiresharkって名前に変わってたのか。 Etherealのページしか見てなかったから知らなかった。 どおりで去年からずーっと更新がないわけだ。 リンクはWiresharkの旧版というのを明記するか、消したほうがいいでしょう。
>>998 使ってるんだから消すな という声も多いよ
∩___∩ | 丿 ヽ / ー ー | レスを読んでも理解できませんので | ( _●_) ミ ROMってます 彡、 ヽノ ,,/ / ┌─┐´ |´ 丶 ヽ{ . }ヽ r ヽ、__)ニ(_丿 ヽ、___ ヽ ヽ と____ノ_ノ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。