• ベストアンサー

ブラウザのファイル転送終了判断

IEやネットスケープといったブラウザは,あるコンテンツを転送したとき,ファイルの転送が終了したことをどうやって把握しているのでしょうか? HTTP GETで取得を開始した後,TCPのコネクションを切る判断をどうやってしているのか知りたいのです. HTTPプロトコルのRFC定義で決められているのでしょうか? もしご存知の方いらっしゃいましたら教えてください.

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

HTTP1.1 では、hyde-la さんのいうように、他の手段も定義されてますね。 現実に使われてるかどうかはわかりませんけど… ただ、http://www.asahi.com/ を見てみましたけど、IE 5.5 と unix 上の NN 4.76 で調べたかぎりでは、複数のコンテンツを1セッションで取得している例 がみつかりませんでした。"/" の取得に限っては、確かに Content-Length は ありませんでしたが、それ以外の *.gif なんかの取得には全部付加されてい ましたよ。

ma-chang
質問者

お礼

いろいろありがとうございます. もう少しいろいろ調べてみます. また質問させていただくこともあるかと思いますが よろしくお願いいたします.

その他の回答 (4)

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.4

思いっきりハズしてしまいましたhyde-laです。 ちょっと調べてみました。 HTTPのメッセージ終了を決定する方法は、他にもいくつかあるようです。 特にmultipartの場合は事前にメッセージ長を決定出来ない為、 lengthが付加されないそうです。 その場合は、transfer-encodingにchunkを指定して、 それでメッセージの終わりを指定することが出来るようです。 この辺は、3.6章のchunkedの説明、4.4章のContent-Lengthの説明、 あと7.2.2章のNoteを読むと解るようです。 また、HTTP/1.1のブラウザは"chunked"Transfer-encodingの内容を理解出来ねばならず、 それが駄目な場合は、その転送コーディングは無視されるべきだ・・・ と書いてあります。 以下の日本語訳をどうぞ。

参考URL:
http://www.geocities.co.jp/SiliconValley-PaloAlto/5694/rfc/
回答No.3

HTTP1.0 でも、指定によって複数個取得することは可能です。 HTTP1.0 の場合は、Content-Length かサーバー側の切断以外には、 長さを知る方法はありませんので、複数個の転送があるときは、 Content-Length は必ず通知されるはずですが… そうじゃない例があったのでしょうか? どうやって確認されたでしょうか?

ma-chang
質問者

補足

Content-Lengthはサーバ側が付けるかつけないか決定しているようなので, (asahi.comなんかをみていると,だいたいCLを付けずにHTTP/1.0 200 OKを返してくる) 基本的にサーバがCLを付けてくれた場合は,1つのflowに複数コンテンツを流すことができる. 付けてくれなかった場合は,おとなしくサーバ側からのTCPをFINを待つということになるのでしょうか? そうすると,HTTPというプロトコルは,TCPの切断をサーバ側から通知されるまではそのコンテンツが転送完了したかどうかわからないというかなり不完全なプロトコルのようなきがするのですが・・・. ちなみにtcpdumpでパケット収集後,ethereal(http://www.ethereal.com/)でフローを抽出しています. そのなかでたまにCLがついていないのにもかかわらず,1flowで複数コンテンツが転送されるのを確認しています.

  • hyde-la
  • ベストアンサー率28% (42/146)
回答No.2

ファイルの転送と終了に関しては、HTTPじゃなくて TCPなのではないでしょうか? ・・・と今までは漠然とそう思ってたのですが、 ちょっとRFCを読んでみたらですね、 ひょっとしてRFC1945のセクション6が怪しいかなぁ、と。 基本的に一つずつファイルを要求し、完了し次第切る。 その完了の目安としてのことをおっしゃっているなら 多分同セクション6に記述されているresponseでしょうか。

回答No.1

結論をいえば、ご想像のとおり、RFC2616で規定されています。 単純にHTTP1.0的なGETしかしない場合には、1個取得した段階でサー バー側が切断してしまいますので、それで判断できますが、 HTTP1.1では複数個を連続して取得できるので、それぞれの内容に 先立ってサイズが通知され、それを利用します。 RFC2616を全部読むのは大変だと思います。HTTPを専門に扱う書籍 もありますので、これを参考にしてはいかがでしょう? 「HTTP詳説」P.S.ヘスマン(ピアソン・エデュケーション)

参考URL:
http://ring.etl.go.jp/pub/doc/RFC/rfc2616.txt
ma-chang
質問者

補足

ご回答ありがとうございます. 現在いろいろ試しているのですが,サーバにapacheを用意して,IEでGETをして(例えばGET http://***.ne.jp/~hoge/pic.gif HTTP/1.0) その転送をtcpdumpなどで見ていると,明らかに1つのフロー(TCPコネクション)で順次,複数コンテンツの転送が行われているんですよね.たとえばサーバが必ずContent-Lengthを通知してくれるのであれば全体のサイズがわかっているのでコンテンツの転送終了が確認できますが,そうでないのになぜIEはそのコンテンツの転送終了を判断できたのか?というのが気になります.しかもHTTP1.0を利用しているのにです. 実装方法に依存しているのかもしれませんが,その手法が謎のままなのです.

関連するQ&A

  • HTTP1.0のブラウザ

    こんにちは。 システムの開発をしていてHTTP1.0のプロトコルでつなげられるブラウザを探しています。 古いバージョンのものだと大丈夫そうなのですがネットスケープにしてもIEにしても古いとダウンロードのページ自体ないので困っています。 ダインロードできるサイトや上記のブラウザを知っている方は教えてください。 よろしくお願いします。

  • HyperText 保護機能付き転送プロトコルを許可する

    HyperText 保護機能付き転送プロトコル (HTTP)がIEのブラウザで不許可になっています。許可するにはどうしたらよいでしょうか?

  • HTTPで通信するソフト

    質問させていただきます。 HTTPで通信するソフト(クライアント側)を作りたいのですが、私は組込み系のソフトしか作ったことがなく、ネットワーク系は初めてだったので、プロトコルの勉強から始めました。TCP/IPは理解し、HTTPの仕様がRFCというもので文書化されているのは分かったのですが、RFCには数が多く、HTTPの仕様も膨大にあるように感じました。 HTTPで通信するソフトを作る人はどうやって仕様を把握し、ソフトを作っているのでしょうか?私は何が必要で、何が必要でないのか判断が付かない状況です。 特にヘッダーフィールドは数が多く、理解が大変で困っています。 (世の中のHTTPクライアントはHTTPの全ての仕様を守っているのでしょうか?) よろしくお願い致します。

  • SkypeからIE以外のブラウザが立ち上がるようにするには?

    dWindows XP Professional SP2で、SkypeをVersion 3.8.0.139にしたところ、チャットに含まれるURLがIEで開かれるようになりました。 これを普段使っている標準のブラウザ(Lunascapeというのを使っています)で開くようにしたいのですが、どうしたらいいのでしょうか? 自分なりに調べ、IEを一度規定のブラウザにして再起動後に再び解除し、Lunascapeを規定に設定し直したり、 フォルダオプション→ファイルの種類の中の  URL: HyperText 転送プロトコル (HTTP)  URL: HyperText 保護機能付き転送プロトコル (HTTP) の関連付けをLunascapeにしてみたのですが、変化ありませんでした。 解決法をご存じの方、ご教授よろしくお願いします。

  • テキストをTCPで転送する場合のSIPのSDPの記述

    SIPを用いた通信で、テキストをTCPで転送する場合のSIPのSDPの記述方法について質問いたします。 RFC4566では、メディアストリームをSDPで、 m=<media> <port> <proto> <fmt> ... で定義し、<media>に"text"を指定できるように記述してあるので、テキストの転送も前提にしているようですが、 トランスポートプロトコルを記述する<proto>には、"udp","RTP/AVP","RTP/SAVP" 等のUDPベースしかなく、パケットロスしては困るテキスト等を転送するためのTCPを指定する方法が見当たりません。 また、コーデックを指定するための、「a=rtpmap」というRTPを前提とした定義になっていますが、TCPを想定していないように見えます。 もしテキスト等をTCPで転送する場合、指定する方法はないのでしょうか。

  • ストリーミングコンテンツについて

    ストリーミングコンテンツのよってはプロトコルのTCP方式、HTTP方式両方で視聴できるものとTCP方式でないと視聴できないものがありますがなぜなんでしょうか?コンテンツ提供会社に聞いてもいまいちよく分かりません。詳しい方よろしくお願いします。

  • webブラウザのファイル関連付けがlunascapeからIEにできません

    最初使用していた人がlunascape2を使っていたみたいなのですがlunascape2をアンインストールしIEを通常使うブラウザに設定しました。IEは起動するのですが、メール添付のURLやWEBの画面をデスクトップ上にコピーすると開くときにメール添付のURLは選択でブラウザが起動せず、デスクトップ上のコピーしてきたWEBアイコンを選択すると、 Luna.exeが見つかりません。 このプログラムは、種類が'URL: Hyper Text 転送プロトコル(HTTP)'のファイルを実行するために必要です。 と出てしまいます。どなたかわかる方教えてください。

  • HyperText転送プロトコル(HTTP)の関連づけが出来ない

    メールソフトなどのURLのリンクからブラウザ(Internet Explorer)が自動的に起動しなくなったため、 HyperText転送プロトコル(HTTP)の関連付けを調べました。 エクスプローラの[ツール(T)]-[フォルダオプション(O)...]メニューから、[フォルダオプション]-[ファイルの種類]を調べましたが、 "URL: Hyper Text 転送プロトコル(HTTP)"、"URL: Hyper Text 保護機能付き転送プロトコル(HTTP)" の項目が無く、設定が出来ませんでした。 この項目を表示させる方法、または関連付けを設定する方法を教えて下さい。

  • 80番ポート(TCP,UDP)の意味

    パケットフィルタリングの設定のために、許可するプロトコル/ポートを調査しています。 Wikipedia「TCPやUDPにおけるポート番号の一覧」によると、「80/TCP,UDP」のようにTCPとUDP両方記載されているものがあります。 私は80番ポート(HTTP)はTCPのみ使用していると思っていましたが、この表記によるとUDPも使用していると解釈できます。 80番ポートに限らず、22(SSH)、25(SMTP)なども同じ表記となっていますが、これはどういう意味なのでしょうか? 個人的には以下の3パターンのいずれかに分類されるのではと考えています。 ■80(HTTP)を例にとったパターン 1.HTTP通信はTCP、UDPどちらのプロトコルでも使用可能 (ソフトウェアはどちらのプロトコルが来ても対応できる) 2.HTTP通信はTCP、UDPの両方を使用している (ソフトウェアが必要に応じてプロトコルを使い分けている) 3.HTTP通信をTCP、UDPのどちらで実装するかはソフトウェアによって異なる ポートによって上記パターンのいずれになるかは異なりと考えられますので、TCPとUDP両方記載されているものは、両方セットでフィルタに設定しようと考えていますが、その判断について基準などがあればご教示をお願いいたします。

  • HTTPアクセスの処理

    HTTPで「http://www.yahoo.co.jp」にアクセスしようとした場合、どのような内部処理が行われるのでしょうか? 大まか流れとして 1・DNSによる名前解決 2・TCPセッションの確立 3・HTTP要求 と考えてます。(ARP解決は省略します) 1・DNSによる名前解決 プロトコルスタックの流れだとHTTP→DNS→TCP→IP→Ethernetでネットワークに送信され、応答がEthernet→IP→TCP→DNSになると思います。 2・TCPセッションの確立(省略) SYN→SYN ACK→ACK 3・HTTP要求(省略) HTTP GET→HTTP 200 OK わからない部分は1・DNSによる名前解決が終わったあとどうやって2・TCPセッションの確立に移行するのかということです。 (同様に2・TCPセッションの確立が終わったあとに3・HTTP要求)