fragment込みでリクエストされた場合どうなるもの?

fragmentを付けてGETした場合とか、サーバは環境変数のQUERY_STRINGとかをどう扱うべきなんだろう。

http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
...
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
...
Request-URI = "*" | absoluteURI | abs_path | authority
Hypertext Transfer Protocol -- HTTP/1.1

↑を見た感じ、fragment付きでリクエストされる事を想定してないように思えるんだけど、どうなんだろう。

とりあえず、実装(挙動)を見ようと言う事でテスト。Apache2で動くPHPプログラムで環境変数をダンプしてみたのが↓(プログラムとテスト結果)。

<?php
 
/** /test/dump.php **/
 
echo "from \$_SERVER:\n";
echo "\tREQUEST_URI  = " . $_SERVER["REQUEST_URI"]  . "\n";
echo "\tQUERY_STRING = " . $_SERVER["QUERY_STRING"] . "\n";
 
echo "from \$_GET:\n";
var_dump($_GET);
 
echo "use apache_getenv():\n";
echo "\tREQUEST_URI  =  " . apache_getenv("REQUEST_URI")  . "\n";
echo "\tQUERY_STRING = "  . apache_getenv("QUERY_STRING") . "\n";
 
/*
~% telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET /test/dump.php?key=value&foo=bar#fragment HTTP/1.1
Host: locahost
 
HTTP/1.1 200 OK
Date: Thu, 21 Dec 2006 13:16:56 GMT
Server: Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.8d DAV/2 PHP/5.2.0
X-Powered-By: PHP/5.2.0
Content-Length: 308
Content-Type: text/html
 
from $_SERVER:
        REQUEST_URI  = /test/dump.php?key=value&foo=bar#fragment
        QUERY_STRING = key=value&foo=bar
from $_GET:
array(2) {
  ["key"]=>
  string(5) "value"
  ["foo"]=>
  string(3) "bar"
}
use apache_getenv():
        REQUEST_URI  =  /test/dump.php?key=value&foo=bar#fragment
        QUERY_STRING = key=value&foo=bar
*/
 
?>
 

fragmentはQUERY_STRINGには含まれず、GETパラメータ(引数)にもくっつかない。foo="bar#fragment"として解釈されるケースってあるのかな?あったとして、それはRFC準拠ってこと?生#はコンポーネントのデリミタだからおかしい?

The generic syntax uses the slash ("/"), question mark ("?"), and number sign ("#") characters to delimit components that are significant to the generic parser's hierarchical interpretation of an identifier.
Uniform Resource Identifier (URI): Generic Syntax

IE6ではLocationで得たURLについては、fragmentが付いていてもそのままリクエストするらしい。世にあるプログラム(アプリケーション)では、これを踏まえた上で、それでも(fragment付きでリクエストされても)動く様に作られているのかな?それとも、『リクエストが悪い』ってことで、エラー扱い?

いろんなウェブサーバの挙動を見てみたいけど、Apache以外よく分かんないんだよなぁ。。。

プロフィール

このブログ記事について

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

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

次のブログ記事は「del.icio.usって所々で遅延処理(?)してるんだね」です。

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