浅谈关于GET和POST两种请求的区别
2017-10-08 22:31
417 查看
关于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两种基本请求方法的区别
- HTTP请求的两种方式get和post的区别
- 浅谈Http之Get Post请求的区别
- 关于get和post请求的区别
- 关于get请求参数的长度和post请求参数的长度的区别
- Ajax的get和post两种请求方式区别
- iOS- 网络请求的两种常用方式GET & POST的区别
- GET和POST的区别及get和post关于请求的编解码的问题
- GET和POST两种基本请求方法的区别(转)
- GET和POST两种请求方式的区别
- 浅谈get和post请求的区别
- [置顶] 两种HTTP请求方法:GET和POST的区别
- iOS- 网络请求的两种常用方式【GET & POST】的区别
- GET和POST的区别及get和post关于请求的编解码的问题
- GET和POST两种基本请求方法的区别
- 关于 GET和POST请求的区别
- Android请求服务器的两种方式--post, get的区别
- HTTP协议的特点,关于HTTP请求GET和POST的区别
- 浅谈get和post请求的区别
- 关于HTTP 协议的特点,以及网络请求GET 和 POST 的区别?