GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。 但是作为一个高端大气上档次的程序

GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。

 
但是作为一个高端大气上档次的程序员,这样回答就弱爆了。
为了搞清楚GET和POST的区别,下面写了一个Java程序来接收HTTP请求。
HTTP是基于TCP协议的,所以可以使用Java最底层的Socket实现。下面的程序仅仅不到10行代码,舍去了异常处理、资源关闭的代码,所以它跟真正的HTTP服务器的差距还略遥远,这里有点标题党了。当然,不要在意这些细节。
[java]  
复制代码
public static void main(String[] args) throws IOException {  
    // 服务器监听端口号8081  
    ServerSocket serverSocket = new ServerSocket(8081);  
  
    // 等待接收请求,这是一个阻塞的方法,当请求到来的时候才会继续向下执行  
    Socket socket = serverSocket.accept();  
  
    // 获取请求内容  
    InputStream is = socket.getInputStream();  
    InputStreamReader reader = new InputStreamReader(is);  
  
    // 输出请求内容  
    while (true) {  
        System.out.print((char)reader.read());  
    }  
}  
复制代码

 

 
HTTP服务器写好了,下面是客户端。 浏览器就是HTTP客户端,不用自己去实现了,只需要写HTML就行。
[html]  
<form method="get" action="http://localhost:8081">  
    name:<input type="text" name="name" /><br>  
    age:<input type="text" name="age" /><br>  
    <input type="submit" />  
</form>  
 
GET请求:
设置form的method="get",启动 Java程序,用浏览器打开HTML输入。
 
提交后看Java程序输出:
复制代码
GET /?name=XXG&age=23 HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
复制代码
 
 
POST请求:
设置form的method="post",启动Java程序,用浏览器打开HTML输入提交。
Java程序输出:
复制代码
POST / HTTP/1.1
Host: localhost:8081
Connection: keep-alive
Content-Length: 15
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
 
name=XXG&age=23
复制代码
 
 
两个实验可以看出,GET和POST参数所在请求数据中的位置不同,这才是GET和POST最基本的区别。
这里科普一下HTTP协议,HTTP请求一般包含三个部分:
Request-Line
Header
<空行>
Message-Body[GET请求不包含Message-Body]
 
 
其中Request-Line,就是请求的第一行,例如上面两个请求:
GET /?name=XXG&age=23 HTTP/1.1
POST / HTTP/1.1
它由三部分组成,请求Method(GET/POST/其他)、Request-URI、HTTP-Version,三个部分中间空格隔开。
Header就是传说中的请求头,键值对的形式,每一条占一行。使用不同浏览器这部分的内容也不同。
Message-Body是请求主体,POST请求参数就在这一部分,它与Header之间必须要用空行隔开,这样服务器才能分清楚Header和Body。Message-Body的长度就是Header中的Content-Length。一般GET请求中是没有这一部分的。
上面POST请求中的参数就是Message-Body:
name=XXG&age=23
 
所以,如果再有人问GET请求和POST请求的区别,可以回答:

GET请求的参数在URL中,在请求的第一行Request-Line中,而POST请求的参数在请求主体Message-Body中。


转载至:http://www.cnblogs.com/549294286/p/4665842.html

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: GET请求POST请求是HTTP协议常用的两种请求方式。它们的主要区别在于: 1. GET请求是从服务器获取数据,而POST请求是向服务器提交数据。 2. GET请求数据会附加在URL后面,以问号“?”分隔,而POST请求数据则包含在请求。 3. GET请求数据传输量较小,因为数据都在URL,而POST请求数据传输量较大,因为数据请求。 4. GET请求数据可以被缓存,而POST请求数据不会被缓存。 5. GET请求的安全性较低,因为数据URL,容易被截获,而POST请求的安全性较高,因为数据请求,不易被截获。 综上所述,GET请求适用于获取数据,而POST请求适用于提交数据。在实际应用,需要根据具体情况选择合适的请求方式。 ### 回答2: GET请求POST请求是HTTP协议常用的两种请求方法,它们在以下几个方面有所区别。 1.参数传递方式: GET请求会将参数URL的形式附加在请求的末尾,可以直接在浏览器的地址栏看到参数,因此GET请求参数会被保存在浏览器的历史记录。而POST请求则是将参数放在请求,不会在URL显示参数。 2.请求数据量: 由于GET请求参数放在URL,传递的数据量有限,一般不超过2KB;而POST请求请求体可以传递较大的数据量,没有限制。 3.请求安全性: GET请求参数暴露在URL,不适合传递敏感信息,如密码等;POST请求参数放在请求,相对安全性较高。 4.请求幂等性: GET请求是幂等的,意味着对同一URL多次请求得到的结果是相同的,不会对服务器产生影响。而POST请求不是幂等的,多次请求可能会产生不同的结果或对服务器产生副作用。 5.缓存处理: GET请求可被浏览器缓存,可以通过浏览器的前进、后退功能访问缓存的结果,提高了页面的加载速度;而POST请求不能被缓存,每次请求都需要重新向服务器发送请求。 综上所述,GET请求适用于请求数据参数较少且不敏感;POST请求适用于提交数据,传递大量数据或包含敏感信息。 ### 回答3: GET请求POST请求是客户端向服务器发送请求的两种常用方法,它们之间有以下区别: 1. GET请求是通过URL传递参数参数请求,而POST请求是通过请求体传递参数参数不在URL。 2. GET请求参数可以通过URL直接看到,而POST请求参数不会显示URL,更加安全。 3. GET请求参数长度有限制,一般为2048个字符,而POST请求参数长度没有限制。 4. GET请求数据传输是明文的,而POST请求数据传输是加密的。 5. GET请求请求结果可以被浏览器主动缓存,而POST请求不能。 6. GET请求会向服务器发送数据,然后服务器返回响应;而POST请求则会将数据发送给服务器,然后服务器返回响应。 7. GET请求请求方式是幂等的,即多次请求得到的结果是一致的;而POST请求请求方式是非幂等的,多次请求可能得到不同的结果。 总结来说,GET请求适合获取数据,不适合传输敏感信息;而POST请求适合上传数据,适合传输敏感信息。在实际应用,选择使用GET请求还是POST请求需要根据具体的需求和安全性考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值