【Ajax】暫定Ajaxライブラリとリクエストヘッダ
暫定版Ajax用ライブラリは、setRequestHeaderを内部で決め打ちしているので、自分が使いたいHTTPリクエストヘッダがある時には不便です。
そこで、v039では、HTTPのリクエストヘッダを、好きな時に、setRequestHeaders()の書式のままで、open()とsend()の間に挿入するための、できるだけ簡単な仕掛けをいれたいと思っています。
で、その前に、HTTPヘッダの動作をライブラリ+ブラウザでテストして見ないといけないということで、取り合えず、送出側だけテストページを作ってみました。
http://jsgt.org/ajax/ref/lib/jslb_ajax039-2.htm
でも、、、ブラウザからのリクエストヘッダも見えるようにしようと思ってPHPで書いてから、、、PHPでは、Apacheおまかせコースと違って、レスポンスヘッダも自前で用意しないといけないことに気がつきました、、、うう、、(^^;;;。ええいっ、もとい、静的ファイルに戻そう、、、。ということで、修正。
http://jsgt.org/ajax/ref/lib/jslb_ajax039.htm
たとえば、さっきアップロードロードした test.txt (Last-Modified: Sat, 19 Nov 2005
11:40:58 GMT ) に、ヘッダを書き換えて、アクセスすると、、、
If-Unmodified-Since:Last-Modified: Sat, 19 Nov 2005 10:40:58 GMT
つまり、
oj.setRequestHeader("If-Unmodified-Since","Sat, 19 Nov 2005 10:40:58 GMT ")
なら、一時間後に更新されてしまっているので、、、
412でPrecondition failed!
If-Modified-Since:Sat, 19 Nov 2005 10:40:58 GMT
つまり、
oj.setRequestHeader("If-Modified-Since","Sat, 19 Nov 2005 10:40:58 GMT")
なら、こちらは、更新されているとボディを返すので、、、
200
と言う具合になります。
ちなみに、If-Modified-SinceはHTTP1.0/1.1のリクエストヘッダで、
指定された時刻以降に更新されていれば、ボディを返し、更新されていなければ、304 (not modified) レスポンスをメッセージボディ無しで返します。
ようするに、これで、ファイルが更新されたかどうかがわかりますから、取得済みのデータを何度も取りに行くといった無駄を、さっくり減らせるわけです。普通は、ブラウザのキャッシュのしくみとして使われていたりしますが、XMLHttpRequestでは、それを明示的に使える、というわけですけれども、このメリットはこの辺を参照→
XMLHttpRequest と If-Modified-Since
暫定Ajaxライブラリでは、(昔ながらの)キャッシュを騙して強制ロードするパラメータも使えるようにしてありますので、そのあたりのブラウザの振る舞いも確認したいなと。
あと、If-Unmodified-Sinceはこの逆で、更新されている場合、サーバは 412(Precondition Failed)ステータスを返します。
v039は、この辺のブラウザ調査などができたらアップデートする予定です。
追記 2005.11.22
少しだけ丁寧に書き換えてみました。色つけてみたり(^^;