0

Cで記述されたカスタムWebサーバーがあります。

ブラウザがページhttp://mydomain.com:30001/index.htmlにアクセスすると、

ウェブサーバーは、ブラウザにhttp 307応答を送信することにより、ブラウザをmydomain.com:30001/login.htmlにリダイレクトします。その後、ブラウザはログインURLにアクセスします。

これはIE8とChromeでうまく機能しました。

しかし、firefox(18+)では、ページhttp://mydomain.com:30001/index.htmlにアクセスすると、

ブラウザはページ(/index.htmlまたは/login.html)を読み込めず、永久に読み込みプロセスにあるようです。(そしてfirebug>ネットワークパネルは何も表示しません。)

Firefoxの設定も試してみました

ツール>オプション>詳細>一般:アクセシビリティ:[]「Webサイトがページをリダイレクトまたはリロードしようとしたときに警告する」、

しかし、効果はなく、何も変わりません。

だから、Firefoxの動作が違うのか、それとも他の理由があるのだろうか。

更新:wiresharkでキャプチャされたFirefoxHTTPパーツは次のとおりです

1.REQUEST(ブラウザのアドレスバーでhttp://mydomain.com:30001/index.htmlにアクセスした場合)

GET /index.html HTTP / 1.1
ホスト:mydomain.com:3001
ユーザーエージェント:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:19.0)Gecko / 20100101 Firefox / 19.0
受け入れ:text / html、application / xhtml + xml 、application / xml; q = 0.9、/ ; q = 0.8
Accept-Language:zh-cn、zh; q = 0.8、en-us; q = 0.5、en; q = 0.3
Accept-Encoding:gzip、deflate
DNT: 1
接続:キープアライブ

2.応答

HTTP / 1.1 307一時的リダイレクト
接続:keep-alive
場所:/login.html

それだけで、Firefoxは別のリクエストで/login.htmlをフェッチしません。

4

2 に答える 2

4

他のサーバーからの応答を比較すると、次のようになります

コンテンツの長さ: 0

応答ヘッダーで問題を解決しました。ありがとう。

プロトコルによれば、Content-Length が指定されていない場合、Content-Length は接続を閉じることによって決定できます。

私の元の応答は Content-Length を提供しません。これは、ブラウザーがこの応答の転送の終了を待って正しい長さを認識していることを意味しますが、 Connection: keep-alive を設定してもこの接続は終了しません。

IEまたはChromeは、307リダイレクトであることを認識した直後にリダイレクト処理を開始すると思いますが、firefoxは、この応答の読み取りが完了するまで処理を開始しません。

于 2013-03-13T12:27:42.747 に答える
1

Firefox で動作する 307 のテスト ケースは次のとおりです: http://greenbytes.de/tech/tc/httpredirects/#t307loc。サーバーの違いを見つける必要があります。

于 2013-03-12T17:29:50.393 に答える