1

ローカルで実行すると、次のヘッダーが生成される ASP.NET / MVC Web アプリがあります。

Cache-Control:public, max-age=3
Connection:Close
Content-Encoding:gzip
Content-Length:287122
Content-Type:text/javascript
Date:Thu, 26 Jul 2012 21:21:26 GMT
ETag:K5fBpkMM+t9XPl07ydQ54pR6bg8=
Expires:Thu, 26 Jul 2012 21:21:29 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0

しかし、プロキシの背後にある AppHarbor で実行すると、取得するヘッダーは次のとおりです。

Cache-Control:public
Connection:keep-alive
Content-Encoding:gzip
Content-Length:287122
Content-Type:text/javascript
Date:Thu, 26 Jul 2012 21:22:49 GMT
ETag:K5fBpkMM+t9XPl07ydQ54pR6bg8=
Expires:Thu, 26 Jul 2012 21:22:41 GMT
Server:nginx

AppHarbor は、私の Cache-Control ヘッダーの Max-Age 部分を取り除き、私の Date を同期していないもので踏みつぶしています。

私の目標は、変更を迅速にロールアウトできるように、最大​​有効期間が非常に短い CDN を介して JavaScript を提供することです。URL を頻繁に変更することはできません。

これを修正する方法を知っている人はいますか?

4

1 に答える 1

2

RFCをより詳しく調べた大学は、サーバーとブラウザーで使用されるこのヘッダーの一般的な 1 行形式のように見えることに気付きました。

Cache-Control: public, max-age=X

実際には有効ではありません。次のように、ヘッダーの 2 つの部分を 2 行に分割します。

Cache-Control: public
Cache-Control: max-age=X

動作します!したがって、私の.netコードでは、これは次のとおりです。

response.Cache.SetCacheability(HttpCacheability.Public);
response.Cache.SetMaxAge(MaxAge);

これになります:

response.AddHeader("Cache-Control", "public");
response.AddHeader("Cache-Control", "max-age=" + (int)MaxAge.TotalSeconds);

AppHarbor から max-age を取得できるようになりました。

于 2012-07-27T14:51:34.937 に答える