HTTP请求中POST与GET的差别
一、原理差别
一般我们在浏览器输入一个网址訪问站点都是GET请求;再FORM表单中,能够通过设置Method指定提交方式为GET或者POST提交方式,默觉得GET提交方式。
HTTP定义了与server交互的不同方法,当中最主要的四种:GET。POST,PUT,DELETE。HEAD,当中GET和HEAD被称为安全方法,由于使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在server上产生不论什么结果。
可是安全方法并非什么动作都不产生。这里的安全方法只指不会改动信息。
依据HTTP规范,POST可能会改动server上的资源的请求。比方CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的。由于再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被改动了,这些便是“不安全方法”。
二、表现形式差别
搞清楚了两者的原理差别后,我们来看一下在实际应用中的差别。
首先,我们先看一下HTTP请求的格式:
<method> <request-URL> <version>
<headers> <entity-body>
在HTTP请求中。神秘行必须是一个请求行,包括请求方法,请求URL。报文所用HTTP版本号信息。
紧接着是一个herders小节,能够有零个或一个首部,用来说明server要使用的附加信息。在首部之后就是一个空行。最后就是报文实体的主体部分,包括一个由随意数据组成的数据块。
可是并非全部的报文都包括实体的主体部分。
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
POST请求实例:
POST /inventory-check.cgi HTTP/1.1
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18 item=bandsaw 2647
接下来看看两种请求方式的差别:
1、GET请求,请求的数据会附加在URL之后,以?切割URL和数据传输,多个參数用&连接。URL的编码格式採用的是ASCII编码。而不是uniclde,即是说全部的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。
上面的item=bandsaw就是实际的数据传输。
因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。
2、数据传输的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。可是在实际开发过程中,对于GET,特定的浏览器和server对URL的长度有限制。
因此,在使用GET请求时。数据传输会受到URL长度的限制。
对于POST,因为不是URL传值,理论上是不会受限制的,可是实际上各个server会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高。
这里的安全是指真正的安全。而不同于上面GET提到的安全方法中的安全,上面提到的安全不过不改动server的数据。比方。在进行登录操作,通过GET请求,username和password都会暴露再URL上。由于登录页面有可能被浏览器缓存以及其它人查看浏览器的历史记录的原因。此时的username和password就非常easy被他人拿到了。
除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击
4、HTTP中的GET,POST,SOAP协议都是在HTTP上执行的
三、HTTP响应
HTTP响应报文的格式
<version> <status> <reason-phrase>
<headers> <entity-body>
status,状态码描写叙述了请求过程中发生的情况
reson-phrase 是数字状态码的可读版本号
常见的状态码以及含义例如以下:
200 OK server成功处理请求
301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包括一个Location URL。说明资源如今所处的位置
304 Not Modified(未改动) 客户的缓存资源是最新的。要client使用缓存内容
404 Not Found 未找到资源
501 Internal Server Error server遇到错误。使其无法对请求提供服务
HTTP响应演示样例
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 12 Hello World!
HTTP请求中POST与GET的差别的更多相关文章
- 用Retrofit发送请求中添加身份验证
用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...
- AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...
- 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?
环境: 有2个业务接口需要转发到82的服务器上: ../user/getCode.do ../user/doLogin.do 现象: 使用上述的 ...
- Http请求中Content-Type讲解以及在Spring MVC中的应用
引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...
- Angularjs之如何在跨域请求中传输Cookie
一般情况我们在使用WebApi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可. 如果这些GET或POST请求不需要传递Cookie数据的话,就没什么问题了,但如果需要,那么会发现 ...
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
http://blog.csdn.net/qxs965266509/article/details/8082810 用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类 ...
- Ajax请求中的Redirect()
页面中有一个IsLogin()方法,用以判断该请求的触发者是否登录,如果登录了,则执行查询操作,如果没有登录,则Redirect()至登录界面 页面使用了较多的Ajax请求来获取数据,而在Ajax请求 ...
- HTTP请求中的form data和request payload的区别
HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...
- HTTP请求中的Body构建——.NET客户端调用JAVA服务进行文件上传
PS:今日的第二篇,当日事还要当日毕:) http的POST请求发送的内容在Body中,因此有时候会有我们自己构建body的情况. JAVA使用http—post上传file时,spring框架中 ...
随机推荐
- JAVA insert() 插入字符串 reverse() 颠倒 delete()和deleteCharAt() 删除字符 replace() 替换 substring() 截取子串
insert() 插入字符串 StringBuffer insert(int index,String str) StringBuffer insert(int index,char ch) Stri ...
- json级联城市
代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> < ...
- 染色法判断是否是二分图 hdu2444
用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...
- Connecting Docker for Cloud Services using SDN and Network Virtualization
Abstract The explosive scale of container CPUs needs highly efficient network virtualization Chal ...
- 建立Hibernate二级Cache
建立Hibernate二级Cache它需要两个步骤:首先,一定要使用什么样的数据并发策略,然后配置缓存过期时间,并设置Cache提供器. 有4种内置的Hibernate数据并发冲突策略,代表数据库隔离 ...
- Java 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families ...
- 采用SharePoint Designer将JavaScript而他们的网站页面集成的定义
采用SharePoint Designer将JavaScript而他们的网站页面集成的定义 像JavaScript这种动态脚本语言可以给你的页面震撼效果.为了加盟JavaScript要定义自己的网站页 ...
- zoj 2874 & poj 3308 Paratroopers (最小割)
意甲冠军: 一m*n该网络的规模格.详细地点称为伞兵着陆(行和列). 现在,在一排(或列) 安装激光枪,激光枪可以杀死线(或塔)所有伞兵.在第一i安装一排 费用是Ri.在第i列安装的费用是Ci. 要安 ...
- JS 查找遍历子节点元素
function nextChildNode(node,clazz,tagName){ var count= node.childElementCount; for(var i=0;i<coun ...
- [视频解说]0基础课程-运营商-Java它J2se
本节解说 运营商应用 Java 算被分成: 算术运算符 颂值运营商 逻辑运算符 位运算符 元运算符 这里录制了 视频解说这几大类运算符,并有练习题提供大家 面试题: 1. 最有效率的方式算出2乘以8等 ...