52

私の質問はばかげているように聞こえるかもしれませんが、確認したかったのは次のとおりです。

  • そのリソースをリクエストする前に HTTP レスポンスを送信することはできますか?

たとえばindex.html、 という画像のみを表示する HTML ページがあるとしimg.jpgます。ここで、訪問者が毎回 HTML ファイルを要求し、次に jpg 画像を要求することをサーバーが認識している場合:

時間を節約するために、サーバーが HTML ファイルの直後に画像を送信することは可能でしょうか?

HTTP が同期プロトコルであることは知っているので、理論的には機能しないはずですが、誰かに確認してもらいたい (または確認しない) だけでした。

4

7 に答える 7

23

Jacques Mattheij による最近の投稿は、まさにあなたの質問を参照して、HTTP は同期プロトコルとして設計されましたが、実装はそうではなかったと主張しています。実際には、ブラウザー (彼は正確には指定していません) は、まだ送信されていない要求への応答を受け入れます。

一方、ハックの少ないものを探している場合は、以下をご覧ください。

  • サーバーがコンテンツをブラウザに送信できるプッシュ技術。ロングポーリング/コメットの「ハック」に代わる最新の実装はwebsocketsです。socket.ioも参照してください。
  • または、 client-side routingを確認することもできます。一部の実装では、これをキャッシュ技術と組み合わせています ( derby.jsのように)。
于 2014-06-09T15:08:10.400 に答える
15

誰かが /index.html を要求し、あなたが 2 つの応答 (/index.html 用と /img.jpg 用) を送信した場合、受信者が 2 つの応答を受け取り、2 番目の応答の前にそれらをどう処理するかをどのように知ることができますか?リクエストは入る?

問題は実際には送信にはありません。問題は、受信側が予期しないデータを取得する可能性があることです。

もう 1 つの問題は、クライアントが If-Modified-Since や If-None-Match などの HTTP キャッシュ ツールを使用する機能を拒否していることです (つまり、クライアントは既にキャッシュされているため、/img.jpg の送信を望まない場合があります)。コピー)。

とはいえ、 Comet手法を使用すると、サーバー プッシュの利点を概算できます。しかし、それは単純に着信 HTTP 要求を予測するよりもはるかに複雑です。

于 2012-09-06T02:31:51.567 に答える
2

リソースを効果的にキャッシュすることで、より良い結果が得られます。つまり、適切なキャッシュ ヘッダーを設定し、Web サーバーをキャッシュ用に構成します。特定の問題がある場合は、base 64 encoding を使用して画像をインライン化することもできます。

ロング ポーリングのJavaScript ソリューションも参照できます。

于 2012-09-06T02:35:37.697 に答える
1

サーバー プッシュを探しています。HTTP では使用できません。SPDY などのプロトコルにはそれがありますが、HTTP に制限されているとうまくいきません。

于 2012-09-06T02:34:39.210 に答える
1

同じ HTTP 応答で .html と画像を混在させることはできないと思います。最初のリクエストの直後に画像データを「すぐに」送信することに関しては、役立つ可能性のある「静的リソース」の概念があります(ただし、クライアントは特定のリソースに対して新しいリクエストを作成する必要があります)。

この記事で言及されている興味深いことがいくつかあります。

于 2012-09-06T02:36:03.653 に答える
-1

いいえ、できません。

リクエストの最初の行には、リクエストされているリソースが含まれているため、最初にリクエストのバイト (少なくとも 1 行分) を調べない限り、何を応答すればよいかわかりません。

于 2012-09-06T02:31:38.307 に答える
-2

いいえ。HTTP は要求/応答プロトコルとして定義されています。1 つの要求: 1 つの応答。それ以外のものは HTTP ではなく、別のものであり、適切に指定し、両端で完全に実装する必要があります。

于 2012-09-06T10:06:35.357 に答える