浅谈关于GET和POST两种请求的区别
来源:互联网 发布:博物馆文艺软件 编辑:程序博客网 时间:2024/05/29 18:36
关于GET和POST两种请求的区别
可能php最经典的几个面试问题就有这个,答案无非也是:
GET请求的数据保存在url里、安全性不高、而且有传输大小限制,一般为2083字节
POST请求的数据不可见、安全性相对较高、大小一般设置为2MB,可修改配置来改变大小
用来应付面试,这种程度的答案也许就过关了,但是答案是否全面准确呢?
下面依据http协议来详细的解释下GET和POST两种请求的区别
首先我们要知道 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
GET请求
GET /books/?sex=man&name=Professional HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
注意最后一行是空行
POST请求
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
1、提交方式在请求中的位置
GET方式提交,把数据在HTTP协议头中,以?分割URL和传输数据,多个参数用&连接;如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
POST提交:把提交的数据放置在是HTTP包的包体中。
所以,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
但是HTTP并没有要求,如果是POST方法,请求数据就要放在BODY中。也没有要求,如果是GET方法,请求数据(参数)就一定要放在URL中而不能放在BODY中。这只是HTML标准对HTTP协议的用法的约定
2、传输数据的大小:首先声明:
HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。所以GET和POST本身没有传输大小的限制,而限制因素主要来源于实际开发
而在实际开发中存在的限制主要有:
GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。(现在IE是否还有限制不太清楚)。
而服务器对URL长度的限制主要是因为URL长了,对服务器处理也是一种负担。原本一个会话没有多少数据,但如果有人恶意地构造几M大小的URL,并不停地访问你的服务器。服务器的最大并发数显然会下降。另一种攻击方式是,把告诉服务器Content-Length是一个很大的数,然后只给服务器发一点儿数据。哪怕你有超时设置,这种故意的次次访问超时也能让服务器gameover。所以,多数服务器因为安全、稳定等方面的考虑,会给URL长度加限制。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。
因此对于GET提交时,传输数据就会受到URL长度的 限制。
POST:因为不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。像Apache一般为2MB,可修改。
3、安全性
POST的安全性要比GET的安全性高
比如:通过GET提交数据,请求数据出现在URL上,虽然是经过base64处理过,但因为页面有可能被浏览器缓存,其他人查看浏览器的历史记录,就可以拿到你的个人信息了,除此之外,使用GET提交数据还可能会受到跨站伪造请求攻击。而POST也并不是完全安全的,只是相对GET的安全性更高点,例如截包重发。
4、对资源信息的操作
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE。一个URL地址用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作(类似于数据库的CURD)。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息
**
参考资料
http://www.cnblogs.com/ranyonsue/p/5984001.html**
- 浅谈关于GET和POST两种请求的区别
- 浅谈get和post请求的区别
- GET和POST两种请求方式的区别
- ajax中get和post两种请求的区别
- GET和POST两种请求方式的区别
- 关于 GET和POST请求的区别
- 浅谈HTTP的GET和POST请求
- http消息当中,post和get两种请求方式的区别
- Get请求和Post请求的区别
- POST请求和GET请求的区别:
- Get请求和Post请求的区别
- GET请求和POST请求的区别
- get请求和post请求的区别
- get 请求和post请求的区别
- get请求和post请求的区别
- Get请求和Post请求的区别
- Get请求和POST请求的区别
- Get请求和Post请求的区别
- Laravel5.5生成验证码与验证正确与否
- 菜鸟初谈web开发
- OC数组中的nil
- 解决Eclipse启动报缺少javax/annotation/PostConstruct的错误
- 梯度提升&随机森林混杂算法预测红酒口感
- 浅谈关于GET和POST两种请求的区别
- Burpsuite抓手机APP包并简要分析
- 强联通 tarjan (模板)
- 初学C++,注释语句
- D. Limak and Shooting Points 计算几何+模拟
- 编译系统GCC
- Hive数据类型
- 在eclipse SDK中配置Java EE的WEB开发环境
- Codeforces Round #332 (Div. 2)-C Day at the Beach (排序)