トップ回答者
ScriptResource.axdとWebResource.axdのクエリパラメータ

質問
-
いつもお世話になっております。
環境はASP.NET 4です。
ScriptManagerなどを使ったりすると、ASP.NETは自動でScriptResource.axdとWebResource.axdという名前で
JavaScriptコードを生成してくれていますが、その後ろについているクエリパラメータは、
どのような規則でつけられるのでしょうか。
例:WebResource.axd?d=RyVa7eQhvkI0Y1ewNOXnszVuJ9gy6b0ObNiCem0tSUbbKSNEMC0WyhgvsbNgsI-A0EZLYtqb9to0Tc7uTjMe0gv1AdSkeOjjLz0lN1rvThM1&t=634490809907624030
質問の理由は、転送量の問題です。
例えばScriptResource.axdとして生成されるMicrosoftAjax.debug.jsですが、縮小なしの7000行のコードです。
もしクエリパラメータがころころ変わるとしたら、ブラウザのキャッシュが活かせず、えらいことになります。
恐らくそんなことにはならないようにしてくれているのでしょうが、
実際のところはどうなっているのでしょうか。
ご存知の方いましたら、お願いします。- 編集済み femp 2011年11月18日 0:21
回答
-
# ScriptResource.axd msdnでググりました。
ScriptResourceHandlerクラスの説明に
既定では、ScriptResourceHandler クラスは、Internet Explorer 7 用に埋め込みスクリプト ファイルの圧縮とキャッシュを行います。 ScriptingScriptResourceHandlerSection クラスの EnableCompression プロパティと EnableCaching プロパティを使用して、圧縮およびキャッシュを無効にできます。 これらのプロパティは Web.config ファイルで設定します。
とありました。
d= や t= の意味はまぁ…undocumentedですがURLを基にした値としか。
キャッシュされているかどうかは、想像で判断せず、ブラウザー側でHTTP Responseヘッダーを確認すべきです。
- 回答としてマーク femp 2011年11月18日 4:00
-
> その後ろについているクエリパラメータは、どのような規則でつけ
> られるのでしょうか。簡単に言えば、d= はスクリプトファイルの ID、t= は dll のタイム
スタンプです。詳しくは以下のページが参考になると思います。ASP.NET AJAX アプリケーションの国際化
http://msdn.microsoft.com/ja-jp/magazine/cc135974.aspx
> もしクエリパラメータがころころ変わるとしたら、ブラウザのキャ
> ッシュが活かせず、えらいことになります。上に紹介したページの説明によれば、不必要に「ころころ変わる」こ
とはないので、そういう心配は無用なようです。- 回答としてマーク femp 2011年11月20日 23:54
すべての返信
-
回答ありがとうございます。
例としてあげたMicrosoftAjax.debug.jsですが、デバッグ時にしか出ないものなのですか?
IIS上でReleaseビルドで実行しても出てきたので取り上げてみたのですが・・・設定ミスでしょうか。
とはいえ、動的生成されるのはこれだけではないので、あまり問題の本質ではないように思います。補足:
追記:
先に申し上げておくべきでした。
開発対象のアプリケーションですが、イントラネット向けのものです。
不特定ユーザからのアクセスではなく、特定ユーザが何度もアクセスするため、
ブラウザキャッシュが使えるかどうかが重要になります。
確認しました。確かに *.debug.js という名前のファイルはデバッグ版のようです。
こっちが出てきてしまう理由についてはまた別途調べてみます。- 編集済み femp 2011年11月18日 1:36 追記
-
# ScriptResource.axd msdnでググりました。
ScriptResourceHandlerクラスの説明に
既定では、ScriptResourceHandler クラスは、Internet Explorer 7 用に埋め込みスクリプト ファイルの圧縮とキャッシュを行います。 ScriptingScriptResourceHandlerSection クラスの EnableCompression プロパティと EnableCaching プロパティを使用して、圧縮およびキャッシュを無効にできます。 これらのプロパティは Web.config ファイルで設定します。
とありました。
d= や t= の意味はまぁ…undocumentedですがURLを基にした値としか。
キャッシュされているかどうかは、想像で判断せず、ブラウザー側でHTTP Responseヘッダーを確認すべきです。
- 回答としてマーク femp 2011年11月18日 4:00
-
Microsoft Reference Source Code Centerから.NET 4のソースコードを入手することができます。その中にはScriptManager.csやScriptResourceHandler.csなんかも含まれていて、動作を知ることはできますよ。
# 動作であって仕様ではありませんが。 -
> その後ろについているクエリパラメータは、どのような規則でつけ
> られるのでしょうか。簡単に言えば、d= はスクリプトファイルの ID、t= は dll のタイム
スタンプです。詳しくは以下のページが参考になると思います。ASP.NET AJAX アプリケーションの国際化
http://msdn.microsoft.com/ja-jp/magazine/cc135974.aspx
> もしクエリパラメータがころころ変わるとしたら、ブラウザのキャ
> ッシュが活かせず、えらいことになります。上に紹介したページの説明によれば、不必要に「ころころ変わる」こ
とはないので、そういう心配は無用なようです。- 回答としてマーク femp 2011年11月20日 23:54