6325


あまりにも初歩的な質問で失礼します。

例えば、

<http://www.example.com/index.html?a=1>  
[http://www.example.com/index.html?a=1&b=2](http://www.example.com/index.html?a=1&b=2)

のようなURLがあるとします。

上記URLの末尾にindex.html?a=1とかindex.html?a=1&b=2など、  
?以下がURLパラメータということを最近知りました。

この「?a=1」とか「?a=1&b=2」という箇所（パラメータ）は、  
"通常"はPHPなどのプログラミング言語から出力されるものなのでしょうか？  
それともHTMLで出力されるものなのでしょうか？

ご教授よろしくお願い致します。


CC BY-SA 3.0
2015-02-11T11:32:53.660
6318
2015-02-11T14:02:42.317
7634
question
php html http
URLのパラメータについて教えていただきたいことがあります。


貴方がその文字列をブラウザに直接入れたのでなければ、そのページに来る直前の動作にそういった文字列を含むページをリクエストしなさいという命令が入っていたのです。  
ブラウザはそれを表示しているだけです。  
その命令をだれがだすのか？というと直接的にはHTMLですね。それを作っているのはPHPだったり、ブラウザ上で動くJavascriptというものであったりしますが。


CC BY-SA 3.0
2015-02-11T11:37:01.643
6319
2015-02-11T11:37:01.643
8136
6318
answer


クエリストリングと言われている部分ですね。  
「PHP」や「HTML」が出力しているというよりは「HTTP」まで話が進みます。

例えば、こんな感じのHTMLがあったとして

[code]

    <form name="form1" method="xxx">
      ユーザID:<input type="text" name="id"><br>
      パスワード:<input type="password" name="pw"><br>
    </form>
    
[/code]

「method="xxx"」の部分を

> 「method="GET"」

とした場合、下記のように送信されます

[code]

    http://hogehoge/fugafuga/login?id=user&pw=password
    
[/code]

> 「method="POST"」

を指定した場合はクエリストリングはつきません。  
※送れていないわけではなく、この場合はHTTPリクエストのボディに格納されています。

[code]

    http://hogehoge/fugafuga/login
    
[/code]

注意点として、クエリストリングはセキュリティ的に弱いところがあるので、  
重要な情報はGETでは送らない方が望ましいと思います。

参考：クエリストリングから情報が漏れる  
<http://www.ipa.go.jp/security/awareness/vendor/programmingv1/a01_04.html>


CC BY-SA 3.0
2015-02-11T12:52:15.383
6324
2015-02-11T12:52:15.383
3516
6318
answer


あなたが URL と呼んでいるものは、 Uniform Resource Locator の略で、リソースがある場所を示している文字列です。URLのうち、
`?` 以降 `#` より前の部分はクエリ文字列 (query component / query string) と呼ばれます。
クエリ文字列がどこで作られるかは、プログラムに依ります。

ウェブページの話の場合、一般的には、URL は HTML 内で指定され、ブラウザがそれがさす場所へアクセスを行うものです。 HTML では、 (1.)
`<a>` 要素にクエリを含んだ URL が指定されるか、 (2.) `<form method="GET">` 内の `<input>`
要素の情報がクエリとして付けられ送信される、もしくは、 (3.) `<img ismap>`
のイメージマップがクリックされた位置がクエリとして付けられ送信されることになっています。

  1. `<a href="page.html?key1=value1">リンク名</a>`
  2. `<form method="get" action="page.html"><input type="text" name="key1" /></form>`
  3. `<a href="page.html"><img src="someimage.gif" ismap /></a>`

[code]

    <pre>&lt;a href=&quot;page.html?key1=value1&quot;&gt;リンク名&lt;/a&gt;</pre>
    <a href="page.html?key1=value1" target="_self">リンク名</a>
    <hr/><pre>&lt;form method=&quot;get&quot; action=&quot;page.html&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;key1&quot; /&gt;&lt;input type=&quot;submit&quot; value=&quot;Submit&quot; /&gt;&lt;/form&gt;(スニペットでは動きません)</pre>
    <form method="get" action="page.html"><input type="text" name="key1" /><input type="submit" value="Submit" /></form>
    <hr/><pre>&lt;a href=&quot;page.html&quot;&gt;&lt;img src=&quot;someimage.gif&quot; ismap /&gt;&lt;/a&gt;</pre>
    <a href="page.html" target="_self"><img ismap src="http://i.imgur.com/PWSOy.jpg"  /></a>
[/code]

また、 JavaScript では、ブラウザに命令してURLへアクセスさせることができます。殆どの場合 URL 文字列に直接 `?` 以降のクエリを付けて
(1.) 場所を開くか、 (2.) 場所からデータを取得するか、 (3.) `<form>` の送信メソッドを呼ぶかになるでしょう。

  1. `window.location="page.html?key1=value1";` or `window.open("...");`
  2. `new XMLHttpRequest().open("GET", "page.html?key1=value1", true).send();`
  3. `document.getElementById("form1").submit();`

また、PHP 等がサーバ側で JavaScript もしくは HTML を生成するために使われたりもしますね。

（基本的にといえば、しごく基本的なところなので、 HTML4 [(1)](http://www.w3.org/TR/REC-
html40/interact/forms.html#form-content-type) / HTML5
[(2)](http://www.w3.org/TR/html5/forms.html#submit-mutate-action)
[(3)](http://www.w3.org/TR/html5/forms.html#form-submission-algorithm) の仕様の他、
RFC 1738 [(4)](http://www5d.biglobe.ne.jp/stssk/nro/rfc1738_j.txt) / 3986
[(5)](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) 等に目を通しておくとよいです。）


CC BY-SA 3.0
2015-02-11T13:39:04.430
6325
2015-02-11T14:02:42.317
2021-10-07T07:05:27.390
-1
4978
6318
answer