次のようなサーバーへのリクエストがあります。
http://localhost/Combine.aspx/flag/file1.js,file2.js,file3.js
私もこれを試しました:
http://localhost/Combine.aspx/flag/value/file1.js/file2.js/file3.js
与えられた 3 つのファイルを単純に結合します。これは正常に機能します。
Firefox からの最初のリクエストで、ページが正しく表示されます。ページを再度更新すると、コンテンツは次のようになります。
��������`I�%&/m�{J�J��t��`$�����iG#)�*��eVe]f@�흼��{���{��;�N'
その場合、サーバーへのリクエストは行われず、私が知る限り、ファイルは Firefox キャッシュからのみ取得されます。
Control-F5 でページを強制的に更新すると、ページは再び正常に表示されます。
Control-F5 (動作)を使用したリクエストとレスポンス (firebug) を次に示します。
応答
Cache-Control public
Content-Type application/javascript; charset=utf-8
Content-Encoding gzip
Expires Sun, 26 Feb 2012 02:57:26 GMT
Last-Modified Fri, 07 Jan 2011 21:08:54 GMT
Etag CLYvZwbFmainWEMi8h-6x-zNEIQ1
Vary Accept-Encoding
Server Microsoft-IIS/7.5
Set-Cookie auth=longstring; path=/
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
Date Thu, 03 Mar 2011 02:57:26 GMT
Content-Length 918
リクエスト
Host localhost
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Cookie auth=longstring
Pragma no-cache
Cache-Control no-cache
これはF5 だけの場合と同じです(動作しません):
応答:
Cache-Control public
Content-Type application/javascript; charset=utf-8
Content-Encoding gzip
Expires Sun, 26 Feb 2012 02:57:26 GMT
Last-Modified Fri, 07 Jan 2011 21:08:54 GMT
Etag CLYvZwbFmainWEMi8h-6x-zNEIQ1
Vary Accept-Encoding
Server Microsoft-IIS/7.5
X-AspNet-Version 2.0.50727
X-Powered-By ASP.NET
Date Thu, 03 Mar 2011 03:01:31 GMT
Content-Length 1533
リクエスト:
Host localhost
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Cookie auth=longstring
私が言える唯一の違いは Content-Length (破損の原因となる可能性があります) ですが、サーバーにヒットすることはないため、私はそれを制御できません。
何が原因でしょうか?
編集:
これは IE8 でも発生しますが、破損したファイルを表示する代わりに、破損したファイルをダウンロードします。サーバーに対して要求が行われることはありません (Visual Studio でブレークポイントを設定します)。
chromeに関しては、urlを直接見ると毎回サーバーにリクエストが入り、毎回動作します。ただし、タグに含めれば、Firefox と同じように動作すると思います。
ああ、また:
Expires ヘッダー (URL のフラグの 1 つ) をオフにすると、すべて正常に動作します。
編集2:
Expires ヘッダーと ETag ヘッダーの両方を送信せず、どちらか一方のみを送信することで、これを回避できました。ただし、ETag ヘッダーがこのような破損を引き起こす理由はわかりません。