2010-11-18 9 views
7

これまでに質問されたことがありましたら、お詫び申し上げますが、これは検索するのに難しい質問です。これは私がWeb開発のすべての年の間にこれを見つけた初めてのことなので、私はかなり興味があります。「?」とは何ですか? forのhtmlスクリプトタグのsrc属性ですか?

私はウェブサイトのいくつかのHTMLファイルを編集していますが、スクリプトタグのsrc属性には、前の作者が疑問符の後にデータを付加していることが気づいています。

例:<script src="./js/somefile.js?version=3.2"></script>

私はこれはPHPなどのGETリクエストに渡す値のためのいくつかの言語で使用されていることを知っているが、私が今まで知っていたとして、私はこれまで、これはJavaScriptで行われていなかったとして - 少なくとも、 javascriptファイルを呼び出すとき。誰でもこれが何かを知っていますか?

編集:うわー、多くの反応。ありがとうございました。そして、多くの人が同様のことを言っているので、私は誰もコメントするのではなく、グローバルなアップデートを投稿します。

この場合、javascriptファイルは静的で、私の好奇心です。私もそれらを開いて、ファイルの読み込み時に何か変数にアクセスしようとしませんでした。私はキャッシングやプレーンなバージョン管理については考えていませんでした。どちらもこのような状況でシームがありそうです。

+0

URLが ".js"で終わっただけであっても、Webサーバーが静的なJavaScriptファイルを返すわけではありません。動的に何かを返すハンドラに要求を転送することができます。 –

+0

これはWebサーバーに渡されます(URL全体が)。 Webサーバーは、URLで必要なものを実行できます。 IIRCはこのアプローチをBing!地図。 –

+0

こんにちは、この質問にはたくさんの反応が早かった。かなりのことが全面的に同じです。 #StackOverflowFlaws –

答えて

10

私は、自分のスクリプトのバージョン3.3を作成した場合、スクリプトのURLでバージョンを変更して、古いスクリプトを実行する代わりに新しいファイルをダウンロードするようにすることを確実にしていたと思いますブラウザにキャッシュされます。

この場合、これはキャッシュ戦略の一部です。

5

覚えておくべきことは、この./js/somefile.js?version=3.2は物理ファイルである必要はないということです。これは、その場でファイルを作成するページにすることができます。だから、リクエストに "このバージョンのjsファイルを教えてください"というメッセージが表示され、サーバーサイドのコードがそれを作成して出力ストリームに書き込みます。

もう1つの方法は、ブラウザがファイルをキャッシュしないように強制し、要求があったときに新しいファイルをプルダウンすることです。 URIが変更されたので、ファイルが完全に新しいと思うでしょう。

+0

ありがとう、この場合は静的なJavascriptファイルです。私はまたそれらを開いて、ファイルロード時に渡された値にアクセスしようとする何かを見ません。 –

1

この場合、バージョン間でソースファイルが確実にキャッシュされないようにするために使用されている可能性があります。

もちろん、リクエストの反対側に何があるのか​​わからずに、サーバー側でjavascriptファイルを生成することもできます。

ところで、URLの?...部分がクエリ文字列と呼ばれます。

1

これは、利用可能な場合にブラウザが新しいバージョンのスクリプトをダウンロードすることを保証するために使用されます。 urlのバージョン番号は、新しいバージョンがデプロイされるたびにインクリメントされ、ブラウザはそれを別のファイルとして表示します。

1

ファイル拡張子が.jsであるというだけで、ターゲットが実際の.jsファイルであるとは限りません。彼らは、要求されたURLをスクリプトに渡すようにWebサーバーを設定することができます(または、文字通りsomefile.jsという名前のスクリプトを持ちます)。

6

私は、JavaScriptファイルの新しいバージョンを公開すると、そのバージョンをHTMLドキュメントにバンプすることができます。これは要求されたときにサーバーサイドでは何もしませんが、ブラウザが別のファイルとして扱うため、ブラウザはスクリプトを再フェッチしてファイルのローカルキャッシュをバイパスします。

このようにして、本当に高いキャッシュ時間(週や月など)を設定できますが、必要に応じて頻繁にスクリプトを更新する機能を犠牲にすることはありません。

2

(適切に設定された)Webサーバーは、JavaScriptソースコードのような静的ファイルを一度送信し、Webブラウザにそのファイルを一定期間ローカルにキャッシュするよう指示します(日、週、月、またはより長いです)。ブラウザが同じファイルに対する別の要求を見ると、サーバから新しいコードを取得する代わりにそのバージョンを使用するだけです。

URLが変更された場合(たとえば、クエリ文字列を追加した場合)、ブラウザはキャッシュされたバージョンが不良であると判断し、新しいものを取得します。このように、?は、開発者が「おっと、私はこのファイルを変更しました。ブラウザが新しいコピーを入手できるように」と言うのに役立ちます。

1

クエリ文字列はjavascriptとは関係ありません。表示されるクエリ文字列に応じて、いくつかのサーバー側コードが異なるバージョンをホストしています。

URL内のパスについては何も想定しないでください。 URL内のパス上の拡張子は、実際には何も教えてくれません。 URLは完全に動的で、一部のサーバーサイドコードによって提供されたり、Webサーバーで動的に書き換えられたりすることができます。

クライアント側のキャッシュを防ぐためにjavascriptファイルをロードするときに、urlにクエリー文字列を追加するのが一般的です。ページが新しいバージョンのスクリプトを更新して参照すると、そのページはバストしてクライアントにそのスクリプトをリフレッシュさせることができます。

関連する問題