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的必要了。
相关推荐
RFC2616是IETF(Internet Engineering Task Force)发布的标准文档,详细阐述了HTTP1.1的所有特性,包括请求方法(GET、POST、PUT等)、状态码(200、404、500等)、首部字段(如Content-Type、Authorization)以及...
为了确保信息能够正确无误地在客户端与服务器之间传输,RFC 2616详尽地定义了各种HTTP头信息和状态码。 其中,HTTP请求方法GET和POST是两个最常用的HTTP方法。GET用于从服务器请求数据,通常用于获取资源,而POST则...
- **3XX**:重定向状态码,表示需要客户端采取进一步的操作才能完成请求。 - **4XX**:客户端错误状态码,表示请求包含语法错误或无法完成请求。 - **5XX**:服务器错误状态码,表示服务器在处理请求的过程中发生了...
1. **HTTP基础**:介绍HTTP协议的基本概念,包括请求方法(GET、POST、PUT、DELETE等)、状态码(200、404、501等)及其含义,以及请求头和响应头的结构与作用。 2. **请求与响应**:详述HTTP请求报文和响应报文的...
此外,实验还提到了其他状态码,如304(未修改)和404(未找到),这些状态码用于指示客户端如何处理后续的行为。 #### 五、文件最后修改时间 - **HTML文件最后修改时间**:Sat, 20 Oct 2012 15:22:01 GMT。 这个...
3. **状态码**:如200(成功)、404(未找到)、500(服务器内部错误)等,这些状态码代表的含义和应用。 4. **首部字段**:如User-Agent、Cookie、Content-Type等,它们在HTTP交互中的作用。 5. **版本**:...
这里主要涉及HTTP/1.0与HTTP/1.1的对比,HTTP请求消息结构(包括请求方法、请求头、实体头等),HTTP响应消息结构(状态码、响应头等),如何使用telnet进行HTTP测试,以及常见的请求方法如GET、POST等。 **3. 深入...
2. 分析响应:检查服务器返回的响应状态码、响应头和响应体内容,这对于调试和优化网页性能至关重要。 3. 捕获数据:可以捕获和分析POST请求中的提交数据,了解数据如何被编码和发送。 4. 比较请求:对比不同请求...
9. **HTTP/1.1与HTTP/2**:对比分析HTTP/1.1与HTTP/2的差异,如多路复用、二进制分帧、服务器推送等特性。 10. **WebSocket**:学习新的交互式通信协议WebSocket,它提供了全双工、低延迟的通信方式,为实时Web应用...
- **扩展**: HTTP 协议具有良好的扩展性,可以通过添加新的方法、状态码或报头字段来适应新需求。 #### 六、安全与隐私考虑 - **HTTPS**: 为了保护数据的安全和隐私,通常会使用 HTTPS 协议,它基于 SSL/TLS 加密...
1. HTTP协议基础:介绍HTTP的工作原理,包括请求方法(GET、POST等)、状态码(200、404、500等)及其含义。 2. 请求与响应:解析HTTP请求报文和响应报文的结构,包括头部字段、实体主体等内容。 3. 缓存机制:讲解...
RFC2616详细规定了HTTP/1.1版本的规范,包括请求方法(如GET、POST)、状态码、报头字段、实体主体等核心概念。HTTP是无状态的,这意味着每个请求都被视为独立操作,不保留与前一次请求的上下文关系。为了解决这个...
- 处理HTTP响应:可以获取响应状态码、头信息,以及读取响应体内容。 - 身份验证:支持多种身份验证机制,如Basic、Digest、NTLM和Kerberos。 - 重定向处理:自动处理HTTP重定向,或允许用户自定义重定向策略。 ...
4. **处理响应**:查看返回的状态码、响应头和JSON数据,检查服务器是否按预期响应。 5. **历史记录**:保存和管理过去的请求,方便日后复用或对比不同请求的结果。 6. **数据验证**:对返回的JSON数据进行断言,...
1. **设置过滤规则**:根据需要,可以设置过滤规则,只显示特定类型的HTTP请求,如特定域名、URL或HTTP状态码。 2. **利用代理模式**:开启代理模式,HttpAnalyzerV7可以捕获其他应用程序的网络请求,适用于跨应用...
4. **请求与响应处理**:支持自定义请求头,可以设置各种HTTP请求方法(GET、POST、PUT、DELETE等),同时能完整地处理HTTP响应,包括状态码、响应头和响应体。 5. **请求重试策略**:通过配置,可以实现对失败请求...
此外,对于想要升级到更高版本ASP.NET(如ASP.NET Core)的开发者来说,这个源码也可以作为一个基础,对比学习不同版本之间的差异和改进。 总之,“网奇IOS智能在线订单系统 v2.5”源码是一个宝贵的学习资源,它...
4. **处理响应**:从HttpResponse中读取状态码、响应头和响应体,进行业务逻辑处理。 5. **释放资源**:使用完HttpClient后,记得关闭连接或将其移出连接池。 四、HttpClient 4.5进阶应用 1. **身份认证**:...
通过阅读和分析`singleget-master`中的代码,我们可以深入了解Go的HTTP客户端API,并对比HTTP1.0与HTTP1.1的差异,这对于理解网络通信和优化性能至关重要。在实际应用中,虽然HTTP1.1和更现代的HTTP/2、HTTP/3更为...