ネットワークプログラミング相談室 Port18

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/02/03(土) 00:52:25
RFC読めよ
HTTPのやつだけで良いから
953デフォルトの名無しさん:2007/02/03(土) 02:41:42
>>951
え〜っと、ちょっと今はプログラムを組んでいないので検証していませんが、
recvの返値を加算していって、受信したデータ量とContent-Lengthの
送信データ量が同じになったらrecvしないようにするのが吉だと思います。
954デフォルトの名無しさん:2007/02/03(土) 06:02:39
>>950
HTTP/1.1になったときだよ。HTTP/0.9にはステータスコード自体なかった
955デフォルトの名無しさん:2007/02/03(土) 16:41:19
>952

助言に従いRFC2068邦訳版を読んでみました(関係ありそうなところだけですが)

>>要求の中でのメッセージ本体の存在は,要求のメッセージヘッダの中にContent-Length又
>>はTransfer-Encodingのヘッダフィールドを含むことによって通知される。

という文を読む取ることができましたが、先の例のとおり Content-Length 自体が3回目の
recvで得られますので、それまでは本体の存在がわかりません。

これは Method が POST であれば、メッセージ本体があると信じて recv しにいくと
言うことでよいのでしょうか?


956デフォルトの名無しさん:2007/02/03(土) 18:53:33
3回目のrecvとか、recvしにいくとか関係ないだろ。
バイトストリームで \r\n\r\n が来るまでがヘッダ。
957デフォルトの名無しさん:2007/02/03(土) 22:06:14
某プロクシ経由でときどきリダイレクトが失敗してたのだが、そいつは
どうやら1回のrecvでレスポンスヘッダをすべて受信できると決めつけていたらしい。
その後プロクシを自作してみてわかった。もちろん自作のやつは>>956のようにしてる。
ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
超有名どころ)考慮せざるを得なかったが
958デフォルトの名無しさん:2007/02/03(土) 22:58:29
>956

ありがとうございます。
なんか色々迷走しちゃいましたが、けっきょくは\r\n\r\nまで読んで、
そこに Content-Length が含まれていれば、メッセージ本体を
取りにいくというようにしました。

いや、そんな真面目に実装する気は無かったんですが(ただの個人使用のユーティリティなんで)
有用なお話が聞けてよかったです。
959デフォルトの名無しさん:2007/02/04(日) 05:42:41
プロトコルがどうこう言う前のSocketの話だな
960デフォルトの名無しさん:2007/02/05(月) 12:18:36
>>957
> ただし世の中には\n\nを送ってくるサーバもあるので(それもamazonとかの
> 超有名どころ)考慮せざるを得なかったが
head ブロックの改行コードが全て LF ?

(CR なら1文字先読み LF で改行確定 || LF なら改行確定) のような処理になるんかな
961デフォルトの名無しさん:2007/02/05(月) 13:19:23
そういえば昔 yahoo が lf だけで改行というヘッダを送ってきていたことがあったな・・・
962デフォルトの名無しさん:2007/02/05(月) 13:36:25
>>960
Amazonとか楽天、Yahooくらいに有名なところで(何処だったか忘れた)
改行コードが全部LFと言うのを見たことがある。
その時は知識がなく、そんなものだと思っていた。
そのおかげで当時の自分のシステムが全部改行コードをLFだけに
してしまった。
963デフォルトの名無しさん:2007/02/05(月) 14:17:29
>>961,962
PGP/MIME で同じように CRLF/LF 問題で嵌ったことあるけど、
HTTP でそういうことがあるのか…
964デフォルトの名無しさん:2007/02/05(月) 14:23:52
昔http proxy書いてたとき、改行がCRだけのサーバーにも遭遇したよ。
だからCR/LF/CRLFの3種類全部対応するはめになった
965デフォルトの名無しさん:2007/02/05(月) 15:24:01
受け入れは緩く、出すものは厳しく
966デフォルトの名無しさん:2007/02/05(月) 18:19:41
>>965
税金の話かとオモッタ。
967デフォルトの名無しさん:2007/02/05(月) 19:17:50
つーか、書いてあるけどな、HTTPのRFCにも。
968デフォルトの名無しさん:2007/02/06(火) 01:49:35
て言うか、ネットワークの基本だろ >>965

それ以前に、会話の基本だったりするが...。
969デフォルトの名無しさん:2007/02/06(火) 01:57:25
女の子は出すのも受け入れるのもガード固いほうがいいよね
970デフォルトの名無しさん:2007/02/06(火) 09:52:20
>>967
改行はCRLFにする事って読んだ事はある。
CRやLFの奴もあるから注意と書かれているのでしょうか?
いや、マジ教えて。
971デフォルトの名無しさん:2007/02/06(火) 09:59:57
3.7.1 Canonicalization and Text Defaults
972デフォルトの名無しさん:2007/02/06(火) 20:54:43
VC2005でソケットを若干使っています
スレッドでaccept関数を呼んでいるのですが、
プログラム終了時にスレッドを終了させたいと思っています。
その場合、acceptを終了させるにはどうしたら良いのでしょうか?
973デフォルトの名無しさん:2007/02/06(火) 20:58:58
winsockなら、acceptしているリスニングソケットを閉じれば抜けられる
974デフォルトの名無しさん:2007/02/06(火) 21:04:58
>>973
なるほど、ありがとうございました。試してみます。
975580:2007/02/06(火) 22:02:22
>>970
HTTPでLFなんてないよ。エンティティボディ内は自由というだけ。
976デフォルトの名無しさん:2007/02/06(火) 22:17:44
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.
977デフォルトの名無しさん:2007/02/06(火) 22:38:26
>>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).
とか書かれてるぞ。アマゾンアソシエイトが全滅しても弾かなくちゃいけないらしい
978デフォルトの名無しさん:2007/02/06(火) 22:39:50
いまどきはあまり寛容に作りすぎるとHTTP Response Splittingとか
HTTP Request Smugglingとかで足元をすくわれかねないし。
979デフォルトの名無しさん:2007/02/06(火) 22:57:36
>>977
パースじゃなく生成しちゃだめって意味なのかな?
980デフォルトの名無しさん:2007/02/06(火) 22:59:47
>>979
プロトコルとしては、ヘッダの改行は必ずCRLF。それ以外はダメ。
高可用アプリケーションは、それ以外が送られてきても受け付けるべき。
と書かれている。
981デフォルトの名無しさん:2007/02/07(水) 01:07:19
CR,CRLF,LFはそういう環境のPCがあるからありうる可能性もある。
HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、
LFCRという腐った物を送りつけるものもある。
982デフォルトの名無しさん:2007/02/07(水) 01:13:26
ヘッダにPCの環境とかふつー関係ないけど
> HTTPに限らなければ、メッセージの途中で種類が切り替わることもあったし、
HTTPでもhtmlの途中で改行の種類が変わるとかふつーにあるぞ。
ユーザーがアップロードしたhtmlと埋め込まれた広告で改行の種類が違うとか。
983デフォルトの名無しさん:2007/02/07(水) 01:49:58
htmlの中の話なんてどうでもいいんだ。プロトコルの話をしてるんだ。
984デフォルトの名無しさん:2007/02/07(水) 02:07:16
>>971にあるようにエンティティボディもプロトコルの一部
985デフォルトの名無しさん:2007/02/07(水) 12:22:47
>>981
そういうのもあるんだ。

   CR LF x [2nd char]
 CR 2 1 1
 LF  1 2 1

改行個数がこうなるわけね。
986デフォルトの名無しさん:2007/02/07(水) 14:17:26
>>975
section 3 は entity body と関係ないよ。
987デフォルトの名無しさん:2007/02/07(水) 22:57:34
結局CR,LF,CRLFをパースできて、CRLFを生成すればOK?
988デフォルトの名無しさん:2007/02/08(木) 00:01:59
LFCRもな
989デフォルトの名無しさん:2007/02/08(木) 12:31:55
途中でコード切り替わりもありえるだと
 1改行→CRLF 固定
 1改行→CR (コード切り替わりに続いて) 1改行→LF
とかの区別つかないのか。 後者の改行1つロストされるのはしかたないよね…
990デフォルトの名無しさん:2007/02/08(木) 13:25:39
そろそろ次スレを
関連リンクは>>3-6のままでいいですか?
991デフォルトの名無しさん:2007/02/08(木) 13:34:15
C++でssh通信を行いたいのですが、そのようなライブラリはありませんか?
992デフォルトの名無しさん:2007/02/08(木) 21:48:47
>>990
etherealはテンプレから消したほうがいい。
993デフォルトの名無しさん:2007/02/08(木) 22:30:33
>>992
なんで?シャー区嫌いなんだけど
994デフォルトの名無しさん:2007/02/08(木) 23:25:21
両方書いておけばいい。
995デフォルトの名無しさん:2007/02/09(金) 00:16:48
出たよ、問題先送り野郎。

「Yes? or NO?」 「あ、あうぁぅ・・・ い・・・の・・・ ぉ、ぉ、オア!」

って感じだなオイ
996デフォルトの名無しさん:2007/02/09(金) 00:27:45
>>995
「あんど」という解決を思いつけないのか。
問題先送り野郎といって安堵しているんじゃねぇ。
997デフォルトの名無しさん:2007/02/09(金) 04:06:15
松竹梅
998デフォルトの名無しさん:2007/02/09(金) 05:55:30
EtherealってWiresharkって名前に変わってたのか。
Etherealのページしか見てなかったから知らなかった。
どおりで去年からずーっと更新がないわけだ。
リンクはWiresharkの旧版というのを明記するか、消したほうがいいでしょう。
999デフォルトの名無しさん:2007/02/09(金) 09:17:47
>>998
使ってるんだから消すな という声も多いよ
1000デフォルトの名無しさん:2007/02/09(金) 09:43:46
  ∩___∩
   | 丿     ヽ
   /  ー   ー |    レスを読んでも理解できませんので
   |    ( _●_)  ミ    ROMってます    
  彡、    ヽノ ,,/     
  /     ┌─┐´    
 |´  丶 ヽ{ .   }ヽ    
  r    ヽ、__)ニ(_丿    
 ヽ、___   ヽ ヽ     
  と____ノ_ノ

10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。