1

私のウェブアプリ(サイト全体へのログインが必要)で作業しているときに、面白い「グリッチ」に気づきました(それを呼び出すことができる場合)。Chromeで(テストサーバー上の)サイトにログインして、Djangoサイトを表示していました。次に、サイトからログアウトしてChromeを完全に閉じました。

次に、Firefoxを開いて、ログインページに移動することを期待して、DjangoサイトへのURLを貼り付けました。しかし、私はログインを求められず、すでにログインしていました。そこで、サイトからログアウトしてFirefoxを閉じました。

次に、Chromeを再度開いてログインしましたが、CSSスタイルがないことがわかりました。ログインすると、サイト全体でCSSスタイルが失われ、テストサーバー304ですべてのCSSファイルとIMGファイルのエラーが発生し続けました。

エラーは時間の不一致に関係していることがわかりました304(Djangoはログアウトしたと思っていましたが、Firefoxではログインしていました。混乱しています)。

これが回避できるのか、それともテストサーバーの「機能」なのか疑問に思っていました。このようなことは本番モードでも起こりますか?


私が求めていることを明確にするために編集してください:

ApacheでWebアプリを起動したときに、Djangoテストサーバーで発生した304エラーによるスタイルと画像の損失は引き続き発生しますか?

ありがとう!

4

1 に答える 1

0

次の 3 点について質問があります。

  1. Firefox にログインした理由。
  2. Chrome で CSS スタイルが失われた理由。
  3. これらすべての 304 応答は何ですか。

残念ながら、最初の 2 つの問題については、かなりの数の説明が考えられます。ほとんどの場合、それほど深刻な問題はありません。

最初の 2 つの問題については、新しい状態に戻してから、問題がまだ発生するかどうかを確認してみてください。たとえば、クリーンな Django データベース (セッションなし) を使用し、キャッシュされたすべてのブラウザー情報 (Cookie、認証、キャッシュされたファイル) をクリアしてみてください。確かに、これは問題をテストするのにかなり時間のかかる方法ですが、状況を直接調べることができなくても、私ができる最善の一般的なアドバイスです。

幸いなことに、304 の応答はまったく問題ではありません。304 は、ブラウザのキャッシュにファイルがあることを意味します。条件付きビューの処理を参照してください。

クライアントが次に同じリソースを要求するとき、送信された最後の変更時刻の日付を含む If-modified-since や、送信された ETag を含む If-none-match などのヘッダーに沿って送信する場合があります。ページの現在のバージョンがクライアントから送信された ETag と一致する場合、またはリソースが変更されていない場合、完全な応答の代わりに 304 ステータス コードが返され、何も変更されていないことがクライアントに通知されます。

于 2011-10-11T09:17:53.717 に答える