HTTP请求中POST与GET的区别
原理区别
一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。
HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。
根据HTTP规范,POST可能会修改服务器上的资源的请求。比如****的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。
表现形式区别
搞清楚了两者的原理区别后,我们来看一下在实际应用中的区别。
首先,我们先看一下HTTP请求的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
在HTTP请求中,奇异行必须是一个请求行,包括请求方法,请求URL,报文所用HTTP版本信息。紧接着是一个herders小节,可以有零个或一个首部,用来说明服务器要使用的附加信息。在首部之后就是一个空行,最后就是报文实体的主体部分,包含一个由任意数据组成的数据块。但是并不是所有的报文都包含实体的主体部分。
GET请求实例:
GET http://weibo.com/signup/signup.php?inviteCode=2388493434
Host: weibo.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
- 1
- 2
- 3
- 1
- 2
- 3
POST请求实例:
POST /inventory-check.cgi HTTP/1.1
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18
item=bandsaw 2647
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
接下来看看两种请求方式的区别:
-
GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
-
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
安全性
POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为”GET”,实质上,GET和POST只是发送机制不同,并不是一个取一个发!
HTTP中的GET,POST,SOAP协议都是在HTTP上运行的
HTTP响应
HTTP响应报文的格式
<version> <status> <reason-phrase>
<headers>
<entity-body>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
status,状态码描述了请求过程中发生的情况
reson-phrase 是数字状态码的可读版本
常见的状态码以及含义如下:
200 OK 服务器成功处理请求
301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包含一个Location URL,说明资源现在所处的位置
304 Not Modified(未修改) 客户的缓存资源是最新的,要客户端使用缓存内容
404 Not Found 未找到资源
501 Internal Server Error 服务器遇到错误,使其无法对请求提供服务
小结
GET:
- 一般只用于查询请求
- 可以被收藏,以及缓存
- 请求参数放在URL中
- 请求数据大小受限于url长度(1024字节)
- 不应该处理敏感数据的请求
POST(对比GET):
- 不能缓存以及收藏
- 请求数据放在body中,长度不限制
- 场景:GET:比如查看新闻,POST:比如登录
参考:
http://blog.****.net/yipiankongbai/article/details/24025633
上一篇: idea修改快捷键方法总结
下一篇: iOS面试题总结
推荐阅读
-
php中$_GET与$_POST过滤sql注入的方法_PHP
-
php中$_GET与$_POST过滤sql注入的方法
-
java发送http的get、post请求实现代码
-
http中Post与Get区别 博客分类: Html html
-
http中Post与Get区别 博客分类: Html html
-
PHP中的使用curl发送请求(GET请求和POST请求)
-
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
-
java发送http的get、post请求实现代码
-
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
-
java实现http的Post、Get、代理访问请求