

`http://example.com/test.php`があったとします。(PHPである必要はない)

[code]

    <pre>
    <?= htmlspecialchars($_SERVER['REQUEST_URI']); ?>
    
    <a href="?foo=bar">?foo=bar</a>
    <a href="?fizz=buzz">?fizz=buzz</a>
    </pre>
    
[/code]

このとき、手元にあるユーザーエージェント(Chrome 41, w3m/0.5.3, GNU Wget
1.13.4)は、どれもリンクを以下のように展開します。

  * `"?foo=bar"` => `http://example.com/test.php?foo=bar`
  * `"?fizz=buzz"` => `http://example.com/test.php?fizz=buzz`

このような挙動について、HTMLや関連する規格の裏付けはあるのでしょうか。それとも、ユーザーエージェントの実装上の慣習に過ぎないのでしょうか。


CC BY-SA 3.0
2014-12-26T03:17:45.353
2614
2014-12-29T09:38:19.973
938
question
html
href属性に?queryのみを記述した場合の振舞


[RFC 3986 Uniform Resource Identifier (URI): Generic
Syntax](http://www.ietf.org/rfc/rfc3986.txt)です。 ([RFC 3986
日本語訳の複製](http://www.hcn.zaq.ne.jp/___/WEB/RFC3986-ja.html))

相対URIを解決するためのアルゴリズムは 「5.2. Relative Resolution」にあります。また、実際の例が「5.4. Reference
Resolution Examples」にあるので抜萃します。

> ## 5.4. Reference Resolution Examples
>
> Within a representation with a well defined base URI of
[code]

>      http://a/b/c/d;p?q
>  
[/code]

>
> ### 5.4.1. Normal Examples
>
> a relative reference is transformed to its target URI as follows.
[code]

>     "?y"            =  "http://a/b/c/d;p?y"
>     "g?y"           =  "http://a/b/c/g?y"
>  
[/code]

よって、それぞれのユーザーエージェントは RFC 3986 の仕様に沿った挙動です。


CC BY-SA 3.0
2014-12-26T03:17:45.353
2615
2014-12-29T09:38:19.973
2014-12-29T09:38:19.973
938
938
2614
answer