`
zha_zi
  • 浏览: 590197 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

关于http1.1 新增加状态码 303 307 与302 的对比

 
阅读更多

               

      HTTP1.0在介绍302时说,如果客户端发出POST请求后,收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为第二次POST时,环境可能已经发生变化(嗯,POST方法不是幂等的),POST操作会不符合用户预期。但是,很多浏览器(user agent我描述为浏览器以方便介绍)在这种情况下都会把POST请求变为GET请求。

      HTTP1.1在介绍302时说,如果客户端发出非GET、HEAD请求后,收到服务端的302状态码,那么就不能自动的向新URI发送重复请求,除非得到用户的确认。(又是-,-)但是,很多浏览器都把302当作303处理了(注意,303是HTTP1.1才加进来的,其实从HTTP1.0进化到HTTP1.1,浏览器什么都没动),它们获取到HTTP响应报文头部的Location字段信息,并发起一个GET请求。

      HTTP1.1和HTTP1.0的302状态码意义是一样的,浏览器对它的处理也是一样的。POST方法的重定向在未询问用户的情况下就变成GET,这种不符合文档规范的问题依然存在。实践在前而文档在后,HTTP1.1把这种POST变GET的行为纳入了RFC文档:HTTP1.1新加入303和307状态码。

     303和307是HTTP1.1新加的服务器响应文档的状态码,它们是对HTTP1.0中的302状态码的细化,主要用在对非GET、HEAD方法的响应上。文档规定:浏览器对303状态码的处理跟原来浏览器对HTTP1.0的302状态码的处理方法一样;浏览器对307状态码处理则跟原来HTTP1.0文档里对302的描述一样。 

    303和307的存在,归根结底是由于POST方法的非幂等属性引起的。
     在HTTP1.1中,302理论上是要被放弃掉的,它被细化为303和307,但为了兼容,它目前还在业界中大量使用,而303和307状态码我还没遇到过(没有使用场景,也没抓到过这样的响应报文)。为什么业界少使用303和307呢?对于GET和HEAD方法来说,307是没必要存在的,用302或者303就可以满足需求了,307仅在POST方法的重定向上有用处。所以我猜测它们少见的原因有两方面:1、POST方法重定向的使用场景太少,使得307状态码没有用武之地;2、GET方法虽然常需要使用的重定向,但使用302状态码也能正确运转,再考虑到微乎其微的兼容问题(现在的浏览器怎么可能不支持HTTP1.1呢!),也就没有使用303的必要了。
分享到:
评论

相关推荐

    HTTP1.1 中文版

    RFC2616是IETF(Internet Engineering Task Force)发布的标准文档,详细阐述了HTTP1.1的所有特性,包括请求方法(GET、POST、PUT等)、状态码(200、404、500等)、首部字段(如Content-Type、Authorization)以及...

    Http rfc2616 中英文对比

    这份文档详细定义了HTTP协议的工作方式,包括请求方法、状态码、报头字段以及HTTP消息的结构。本文件包含了HTTP中文版和英文版的PDF,对于理解和学习HTTP协议具有重要意义。 首先,我们要理解HTTP的基本概念。HTTP...

    三歪教你学HTTP.pdf

    - **3XX**:重定向状态码,表示需要客户端采取进一步的操作才能完成请求。 - **4XX**:客户端错误状态码,表示请求包含语法错误或无法完成请求。 - **5XX**:服务器错误状态码,表示服务器在处理请求的过程中发生了...

    http权威指南-文字版和英文版-完整版

    1. **HTTP基础**:介绍HTTP协议的基本概念,包括请求方法(GET、POST、PUT、DELETE等)、状态码(200、404、501等)及其含义,以及请求头和响应头的结构与作用。 2. **请求与响应**:详述HTTP请求报文和响应报文的...

    wireshark抓包实验之HTTP

    此外,实验还提到了其他状态码,如304(未修改)和404(未找到),这些状态码用于指示客户端如何处理后续的行为。 #### 五、文件最后修改时间 - **HTML文件最后修改时间**:Sat, 20 Oct 2012 15:22:01 GMT。 这个...

    HTTP.rar_hettp://fil_http//sese688..com

    3. **状态码**:如200(成功)、404(未找到)、500(服务器内部错误)等,这些状态码代表的含义和应用。 4. **首部字段**:如User-Agent、Cookie、Content-Type等,它们在HTTP交互中的作用。 5. **版本**:...

    http网页请求过程分析工具

    2. 分析响应:检查服务器返回的响应状态码、响应头和响应体内容,这对于调试和优化网页性能至关重要。 3. 捕获数据:可以捕获和分析POST请求中的提交数据,了解数据如何被编码和发送。 4. 比较请求:对比不同请求...

    《http权威指南》高清完整中文带标签

    9. **HTTP/1.1与HTTP/2**:对比分析HTTP/1.1与HTTP/2的差异,如多路复用、二进制分帧、服务器推送等特性。 10. **WebSocket**:学习新的交互式通信协议WebSocket,它提供了全双工、低延迟的通信方式,为实时Web应用...

    HTTP从入门到精通

    1. HTTP协议基础:介绍HTTP的工作原理,包括请求方法(GET、POST等)、状态码(200、404、500等)及其含义。 2. 请求与响应:解析HTTP请求报文和响应报文的结构,包括头部字段、实体主体等内容。 3. 缓存机制:讲解...

    Ftp协议:RFC959和HTTP协议:RFC2616

    RFC2616详细规定了HTTP/1.1版本的规范,包括请求方法(如GET、POST)、状态码、报头字段、实体主体等核心概念。HTTP是无状态的,这意味着每个请求都被视为独立操作,不保留与前一次请求的上下文关系。为了解决这个...

    httpclient

    - 处理HTTP响应:可以获取响应状态码、头信息,以及读取响应体内容。 - 身份验证:支持多种身份验证机制,如Basic、Digest、NTLM和Kerberos。 - 重定向处理:自动处理HTTP重定向,或允许用户自定义重定向策略。 ...

    非常好用的模拟请求软件Httpdebug

    4. **处理响应**:查看返回的状态码、响应头和JSON数据,检查服务器是否按预期响应。 5. **历史记录**:保存和管理过去的请求,方便日后复用或对比不同请求的结果。 6. **数据验证**:对返回的JSON数据进行断言,...

    HttpAnalyzerV7

    1. **设置过滤规则**:根据需要,可以设置过滤规则,只显示特定类型的HTTP请求,如特定域名、URL或HTTP状态码。 2. **利用代理模式**:开启代理模式,HttpAnalyzerV7可以捕获其他应用程序的网络请求,适用于跨应用...

    httpcomponents-client-4.5.5 jar包

    4. **请求与响应处理**:支持自定义请求头,可以设置各种HTTP请求方法(GET、POST、PUT、DELETE等),同时能完整地处理HTTP响应,包括状态码、响应头和响应体。 5. **请求重试策略**:通过配置,可以实现对失败请求...

    ASP.NET源码——[电子商务]网奇IOS智能在线订单系统 v2.5 (ASP.NET 1.1).zip

    此外,对于想要升级到更高版本ASP.NET(如ASP.NET Core)的开发者来说,这个源码也可以作为一个基础,对比学习不同版本之间的差异和改进。 总之,“网奇IOS智能在线订单系统 v2.5”源码是一个宝贵的学习资源,它...

    httpcomponents-client-4.5

    4. **处理响应**:从HttpResponse中读取状态码、响应头和响应体,进行业务逻辑处理。 5. **释放资源**:使用完HttpClient后,记得关闭连接或将其移出连接池。 四、HttpClient 4.5进阶应用 1. **身份认证**:...

    singleget:Go中内置的HTTP1.0客户端

    通过阅读和分析`singleget-master`中的代码,我们可以深入了解Go的HTTP客户端API,并对比HTTP1.0与HTTP1.1的差异,这对于理解网络通信和优化性能至关重要。在实际应用中,虽然HTTP1.1和更现代的HTTP/2、HTTP/3更为...

Global site tag (gtag.js) - Google Analytics