`

Get和Post的区别

阅读更多

            发现很多面试题都会问道Get和Post的区别,今天来了兴致,好好地研究一下。Get和Post的区别在网上可以搜到很多,首先看一下基本的定义:

 

           Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。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());
		}

 

我们写一个html模拟客户端,

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>

 post方式的:

<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>

 保存为.html文件之后,分别打开。服务器会打印出具体消息:

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方式的:

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:Request-Line


2:Header


3:<空行>

     Message-Body[GET请求不包含Message-Body]

 

其中Request-Line包含三个部分:

Method(GET/POST/其他)、Request-URI、HTTP-Version,三个部分由空格隔开。

 

    所以可以知道,GET请求的参数在Request-Line的Request-URI中,而POST请求的参数在请求主体Message-Body中。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics