absolute-URIはfragmentを含まない(んですよね?)

注)激しく的外れな事を書いている気がします。

知らなかった。。。というか、fragmentって言葉を知らなかった(ハッシュとかページ内アンカーとか、適当に呼んでた)。

「Locationヘッダにfragmentを含めていいのかどうか」という疑問にぶつかって、Locationヘッダはabsolute-URIを利用可能という事で、じゃあOKだね、と。

Location = "Location" ":" absoluteURI
[RFC2616]Hypertext Transfer Protocol -- HTTP/1.1
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
[RFC3986]Uniform Resource Identifier (URI): Generic Syntax

URI?まあ、いいか。

absolute-URI = scheme ":" hier-part [ "?" query ]
[RFC3986]Uniform Resource Identifier (URI): Generic Syntax

駄目じゃん。。。URIで安心してabsolute-URIを見逃してた(嘘付きました、ごめんなさい)。

この疑問の切っ掛けは、「IE6でfragmentを含むURLのリダイレクトに失敗してるよ」と言われたから。

ヘッダを見てみると、↓。

Location: http://www.example.com/item?id=1234#price
...
GET http://www.example.com/item?id=1234#price HTTP/1.1

このときのレスポンスはプログラムが吐いているエラーページ。で、Firefoxだと、↓。

Location: http://www.example.com/item?id=1234#price
...
GET http://www.example.com/item?id=1234 HTTP/1.1

どうやら、Locationで受け取ったURLをGETする間で何かがあるらしい。で、エラーページが出てきたのは、クエリの解釈を期待通りに出来てない事が原因らしい。id="1234"を期待してるけど、id="1234#price"で渡ってる、と。

で、IE7で試すと問題がないらしい。ん?RFC2396->RFC3986で何か変わった?

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
absoluteURI = scheme ":" ( hier_part | opaque_part )
[RFC2396]Uniform Resource Identifiers (URI): Generic Syntax

変わってない。じゃあ、HTTP/1.0かと思ってみても、Locationの記述は変化無し。

Location = "Location" ":" absoluteURI
[RFC1945]Hypertext Transfer Protocol -- HTTP/1.0

fragment付きURIにリダイレクトする場合、HTTPヘッダだけでは無理?

「動くから」を理由にしてLocationヘッダにfragment付きURIを利用して問題はないでしょうか?IE6については、「key=value&#fragmentにしてしまえ」で。。。

「fragment込みのURIはユニークなリソースIDだ」と考える事は無茶なのかな。「RFC準拠ですから」でWeb利用者は納得出来るもの?

「RFCに従いつつ、fragment込みのURIにリダイレクトする方法」を考えないと、かなぁ。


。。。Web系開発に携わってるくせに、根っこを押さえられてない自分が憎い。。。


Locationヘッダに関する正誤表?

Location = "Location" ":" absoluteURI [ "#" fragment ]
HTTP/1.1 Specification Errata
プロフィール

このブログ記事について

このページは、koshigoeが2006年12月20日 22:26に書いたブログ記事です。

ひとつ前のブログ記事は「del.icio.usのimportはprivateになるんだね」です。

次のブログ記事は「del.icio.usの"links for you"って楽しい」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。