1

30ミリ秒以内に2つのHTTPリクエスト(2つの異なるPNG)ファイルを送信するIPadSafariがあります。

キープアライブHTTP1.1接続でも、要求/応答の明確なシーケンスが必要だと思いました。

私が見たのは、Safariブラウザが応答を待たずに30ミリ秒以内に2つのGETリクエストを送信することです。これにより、一部のWebサーバーで問題が発生します。

状況:他の画像(PNGやGIFなど)への参照を含むSVGをロードするHTML5があります。この問題はiPhone5では発生しませんが、iPadで発生します。

このwiresharkダンプを参照してください:http: //tinyurl.com/c7m37b9 (フレーム116/117)

IPad(1)情報:バージョン5.1.1(9B206)モデルMB2292FD Safari 5.1

[GET /Licht_3.gif HTTP/1.1
...
User-Agent: Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML,      like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3
Accept: */*
...
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Connection: keep-alive]

[GET /Licht_3.gif HTTP/1.1
Host: 192.9.225.251:8081
...
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Connection: keep-alive]

[HTTP/1.1 200 OK
...
Content-Type: image/png
Content-Length: 3921]
4

3 に答える 3

1

これは、ブラウザが HTTP 1.1 Spec 8.2.4 に準拠していることが原因ではないかと思います。これにより、クライアントが中間層を介してサーバーに接続され、接続が閉じられる前にサーバーから応答が得られない場合、クライアントは要求を再試行できます。

このエラーを見て、次のリンクが役立つことがわかりました。

https://www.ravellosystems.com/blog/beware-http-requests-automatic-retries/

http://geek.starbean.net/?p=393

于 2016-09-26T21:09:38.553 に答える
0

これもモバイルサファリクライアントから見ています。私が見つけた唯一の回避策は、Nginx でサーバー全体のキープアライブを無効にすることです。キープアライブが無効になっていると、Safari クライアントから重複したリクエストが受信されなかったり、パイプライン処理が機能しない可能性があります。

Nginx には keepalive_disable オプションがありますが、特定のブラウザーの POST 要求に対してのみ機能し、多くのオプションはありません。keepalive_timeout 0 を使用して、そのサーバーでキープアライブを無効にすることになりました。将来、より良い解決策があることを願っています。

パイプラインを正しく使用すると、リクエストが重複するのではなく、複数の異なるリクエストが送信されると思います。

于 2014-09-09T18:06:46.293 に答える