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!







				
时间: 2024-10-24 03:13:23

HTTP请求中POST与GET的差别的相关文章

AGS中通过FeatureServer插入数据失败、插入数据在WMTS请求中无法显示以及version概念的讨论

1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失败或者插入的数据在WMTS请求中无法显示出来的问题.针对这些问题,我在这篇文章中,将详细描述造成以上问题的原因.在此WebGIS产品的前台和后台接口中,此插入数据核心部分均是FeatureServer请求.所以我们首先对FeatureSever服务做一个大致的了解. 2.FeatureServer服务的大致了解 2.1 FeatureServer服务提供的功能 FeatureServer服务可以提供如下几种服务: 我们可以得出

AJAX POST请求中參数以form data和request payload形式在servlet中的获取方式

HTTP请求中,假设是get请求,那么表单參数以name=value&name1=value1的形式附到url的后面,假设是post请求,那么表单參数是在请求体中,也是以name=value&name1=value1的形式在请求体中.通过chrome的开发人员工具能够看到例如以下(这里是可读的形式,不是真正的HTTP请求协议的请求格式): get请求: RequestURL:http://127.0.0.1:8080/test/test.do?name=mikan&address=

HTTP请求中POST与GET的区别

本文章已收录于: 一.原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式. HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作.不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果.但是安全方法并不是什么动作都不产生

DIV中display和visibility属性差别

DIV中display和visibility属性差别 DIV中display和visibility属性差别还是挺大的,虽然Visibility和Display属性都可以达到隐藏页面元素的目的,但它们的区别在于如何回应正常文档流 本节向大家描述一下DIV中display和visibility的差别,visibility属性是隐藏元素但保持元素的浮动位置,而display实际上是设置元素的浮动特征,虽然它们都可以达到隐藏页面元素的目的,但它们的区别在于如何回应正常文档流. DIV中display和v

Web请求中同步与异步的区别

普通的B/S模式就是同步,而AJAX技术就是异步,当然XMLHttpReques有同步的选项. 同步:提交请求->等待服务器处理->处理完毕返回.这个期间客户端浏览器不能干任何事. 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕. 举个生动的例子吧: 同步就是你叫我去吃饭,我听到了就和你去吃饭:如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭. 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭. 所以,要

AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式

HTTP请求中,如果是get请求,那么表单参数以name=value&name1=value1的形式附到url的后面,如果是post请求,那么表单参数是在请求体中,也是以name=value&name1=value1的形式在请求体中.通过chrome的开发者工具可以看到如下(这里是可读的形式,不是真正的HTTP请求协议的请求格式): get请求: RequestURL:http://127.0.0.1:8080/test/test.do?name=mikan&address=str

Http请求中Content-Type讲解以及在Spring MVC中的应用

引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值,以及在Spring MVC中如何使用它们来映射请求信息. 1.  Content-Type MediaType,即是Internet Media Type,互联网媒体类型:也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息. [html] vie

在请求中存取属性setAttribute&amp;getAttribute方法

在请求中保存属性: public void setAttribute(String name,Object o) request.setAttribute("mess","注册失败");在请求中获取属性: public Object getAttribute(String name)两点注意事项: 1.在使用属性值的时候要做非空判断,否则会出现空指针异常 2.她的返回值类型是Object类型,需要做数据类型转换 示列: doUserCreate.jsp页面代码//添

Web容器自己主动对HTTP请求中參数进行URLDecode处理

这篇文章转载自 : Web容器自己主动对HTTP请求中參数进行URLDecode处理 如题.在Java中或许非常多人都没有注意到当我们发送一个http请求时,假设附带的參数被URLEncode之后,到达web容器之后,开发人员获取到的參数值会自己主动变成了encode之前的值.这是一个非常好的特点,开发人员全然能够忽略http的參数是否须要decode这样的事,可是decode究竟是在什么发生的呢? 第一步就是从request.getParameter()方法下手,可是ServletReques