前言
之前一次面试时面试官问到了Get请求和Post请求的区别,对于web基础来说这个还是比较重要的,所以我打算整理一下分享给大家,以下是我个人的一些总结,如果大神有更好的理解,欢迎补充。
从三个方面来总结
- Get请求和Post请求的区别
- 优缺点
- 何时用Get请求,何时用Post请求
正文
1、Get请求和Post请求的区别
我们主要从五个角度去分析两者的区别:
1、请求的形式
- GET请求:把请求的数据放在URL上,用?分割URL和传输的数据,多个参数的话用&符号连接。
举个例子,“ http://www.laziji.com?id=11&name=laziji ”在这个地址里面,?后面的时请求的参数,这里有两个参数id和name,值分别为“11”和“laziji”。总结:1.参数就是传给后台取值的,“?”是解析的开始点,“&”是将多个参数进行连接的。2.URL的结构:“协议://域名或IP地址:端口号/目录/文件名.文件名后缀?参数1=值1&参数2=值2”
- POST请求:把请求的数据放在HTTP请求包的包体中(requrest body)。
POST请求包含两个部分:请求头(header)和请求体(body)
2、传输数据的大小
GET请求:虽然在HTTP规范中没有对URL的长度和传输数据的大小做限制,但是实际情况下,浏览器一般会限制url的长度不超过2k个字节,提交的数据最大是2k。
POST请求:理论上也是不限制的,但是实际上服务器会对post提交数据的大小做限制。
3、安全性
GET请求:在传输数据时会将数据保留在浏览器的历史记录中,而且传输的数据参数会显示在url中,所有人都可以查看,安全行低。
POST请求:在请求时数据是存放在请求包中的,不显示在url中,并且数据不会保留在浏览器的历史记录中。
4、编码方式
GET请求只能ASCII编码;POST请求支持多种编码方式。
5、对服务器的操作
GET请求:只是从服务器获取数据,不进行修改。
POST请求:向服务器提交数据,可能更新数据,也就更改了服务器的数据。
2、优缺点
- get请求比post请求快。
get产生一个TCP数据包,post产生两个TCP数据包;
GET请求:浏览器将header和data一起发送,服务器响应200(返回数据)。POST请求:浏览器先将header发送,服务器响应100 continue,浏览器再将data发送,服务器响应200(返回数据)。
- get会将数据保留在浏览器的历史记录中,post不会。
- post不能进行管道化传输。
3、何时用Get请求,何时用Post请求
适合使用GET请求的情况:
- 用来查找资源,HTML表单数据只是用来帮助搜索。
- 请求结果无持续性的副作用。
- 收集的数据及HTML表单内输入的字段名称不超过1024个字符
适合使用POST请求的情况:
- 请求结果有持续性的副作用。如修改数据、添加数据。
- 当使用get方法URL过长时改用post方法。
- 要传输的数据不是采用7位的ASCII编码。