GetとPostの違い

3046 ワード

多くの面接問題を発見したら、GetとPostの違いを聞きます.今日は興味があって、よく調べてみます.GetとPostの違いはネットでたくさん見つけられます.まず基本的な定義を見てみます.
 
           Httpはサーバとの相互作用の異なる方法を定義しています.基本的な方法はGET、POST、PUT、DELETEの4つです.URLの全称はリソース記述子であり、一つのURLアドレスはネットワーク上のリソースを記述するためのものであり、HTTP中のGET、POST、PUT、DELETEはこのリソースの調査、変更、削除の4つの操作に対応していると考えられています.ここでは、GETは一般的にリソース情報を取得/照会するために用いられますが、POSTは一般的にリソース情報を更新するために用いられます.PostはGetより安全性が高い.実質的にGETとPOSTは送信の仕組みだけが違っています.
 
      具体的なGetとPost方法が見えるように、送信されたデータです.GetとPostのプロセスをシミュレーションした.HttpはTcpに基づいて実現されるので、下のSocketを使ってHttpサーバをシミュレートします.得られたGetまたはPostから送信されたリクエストメッセージを印刷します.
ServerSocket serverSocket=new ServerSocket(8802);
		Socket client=serverSocket.accept();
		InputStreamReader in=new InputStreamReader(client.getInputStream());
		while(true){
			System.out.print((char)in.read());
		}
 
アナログクライアントを書きます.
get方式の:
<form method="get" action="http://10.13.30.160:8802">
	name:<input type="text" name="name" /><br>
	age:<input type="text" name="age" /><br>
	<input type="submit" />
</form>
 ポスト方式の:
<form method="post" action="http://10.13.30.160:8802">
	name:<input type="text" name="name" /><br>
	age:<input type="text" name="age" /><br>
	<input type="submit" />
</form>
 ファイルを保存してから、それぞれ開きます.サーバは具体的なメッセージを印刷します.
get方式の:
GET /?name=wjy&age=24 HTTP/1.1
Host: 10.13.30.160:8802
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/2.x Safari/537.31
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: iso-8859-1,*,utf-8
 
ポスト方式の:
POST / HTTP/1.1
Host: 10.13.30.160:8802
Connection: keep-alive
Content-Length: 15
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 BIDUBrowser/2.x Safari/537.31
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: iso-8859-1,*,utf-8

name=wjy&age=24
 
コントラストにより,GetとPostは要求中のパラメータの位置が異なることが分かった.
HTTP要求は、一般に以下の部分を含む.
 
1:レクサス-Line
2:ヘッド
3:<空白行>
     Message-Body[GET要求はMessage-Bodyを含まない]
 
Request-Lineには三つの部分が含まれています.
Method(GET/POST/その他)、Request-URI、HTTP-Versionの3つの部分はスペースで仕切られています.
 
    したがって、GET要求のパラメータはRequest-LineのRequest-URIにあり、POST要求のパラメータは要求主体Message-Bodyにあることがわかる.