一、原理差别

一般我们在浏览器输入一个网址訪问站点都是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的差别的更多相关文章

  1. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

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

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 在多个项目中,当我方接口给其他部门人员使用时出现了插入数据失 ...

  3. 在基于vue的webpack脚手架开发中使用了代理转发,结果浏览器发出的请求中不带cookie导致登录时总是session失效怎么办?

    环境:            有2个业务接口需要转发到82的服务器上:     ../user/getCode.do     ../user/doLogin.do 现象:          使用上述的 ...

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

    引言: 在Http请求中,我们每天都在使用Content-type来指定不同格式的请求信息,但是却很少有人去全面了解content-type中允许的值有多少,这里将讲解Content-Type的可用值 ...

  5. Angularjs之如何在跨域请求中传输Cookie

    一般情况我们在使用WebApi之类的技术时,都会遇到跨域的问题,这个只需要在服务端做一下处理即可. 如果这些GET或POST请求不需要传递Cookie数据的话,就没什么问题了,但如果需要,那么会发现 ...

  6. HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头

    http://blog.csdn.net/qxs965266509/article/details/8082810 用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类 ...

  7. Ajax请求中的Redirect()

    页面中有一个IsLogin()方法,用以判断该请求的触发者是否登录,如果登录了,则执行查询操作,如果没有登录,则Redirect()至登录界面 页面使用了较多的Ajax请求来获取数据,而在Ajax请求 ...

  8. HTTP请求中的form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  9. HTTP请求中的Body构建——.NET客户端调用JAVA服务进行文件上传

    PS:今日的第二篇,当日事还要当日毕:)   http的POST请求发送的内容在Body中,因此有时候会有我们自己构建body的情况. JAVA使用http—post上传file时,spring框架中 ...

随机推荐

  1. ubuntu下安装java和eclipse

    java安装 1 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 2 ...

  2. HibernateReview Day1 - Introduction

    Hibernate已经学过去大概有半个月了,然后默默的忘掉了……所谓Practice makes perfect. 我尽力重新拾起来. 1.什么是ORM 在介绍Hibernate之前,我们先学习下OR ...

  3. SQL Server中的查询

          本博文简介一下SQL Server中经常使用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCom ...

  4. 深挖BAT内部级别和薪资待遇,你敢看?(转)

    一. 阿里内部级别和薪资待遇 先看个例子,或许你也曾像他一样纠结 BAT 的 offer: 最近刚通过阿里面试,但基本薪酬也是不升反小降. 级别只有 P6+,连 P7 都没有,非常郁闷,打算拒绝算了. ...

  5. Quartz.NET学习系列

    Quartz.NET它是一个开源的任务调度引擎,对于周期性任务,持久性任务提供了很好的支持,并且支持持久性.集群等功能. 这是什么对我来说Quartz.NET学习记录: 源代码下载http://yun ...

  6. sensor调试过程HAL层数据不能被转移到app

    最近调试e-compass传感器,我遇到了一个奇怪的问题,驱动器正常报告数据.但该数据到HAL后该层已经无法上传app. 经debug,我发现这是一个供应商派的代码存在bug,open的fd没有设置N ...

  7. Win32 Windows规划 三

    一.NMAKE 和 Makefile 1.1  NMAKE - 命令解释器. 依据Makefile文件里定义的脚本.完毕项目的编译等操作 1.2 Makefile - 定义编译.连接等脚本语言 1.3 ...

  8. 采用jqueryUI创建日期选择器

    该公司的项目使用的插件时间选择,百度很长一段时间.没有找到合适的,而且,他们在看了jqueryUI.自己变成一个更好的集成日期选择器.为了以后遇到相同的问题是可以解决. 以下就贴出部分使用的代码,比較 ...

  9. android-sdk-windows下载版

    Android SDK 4.0.3 开发和执行环境配置 近期又装了一次最新版本号的ADK环境 眼下最新版是Android SDK 4.0.3 本文的插图和文本尽管是Android2.2的 步骤都是一样 ...

  10. lua-TestMore(转)

    http://fperrad.github.io/lua-TestMore/ http://www.softpedia.com/get/Programming/Debuggers-Decompiler ...