3

次のようなサーバーへのリクエストがあります。

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 ヘッダーがこのような破損を引き起こす理由はわかりません。

4

1 に答える 1

0

これは、IIS の構成が原因です。IIS を既定のアプリケーション プールではなく、ASP 4.0 クラシックとして調整する

于 2013-04-11T08:40:55.410 に答える