`
zha_zi
  • 浏览: 584816 次
  • 性别: 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的必要了。
分享到:
评论

相关推荐

    go web编程

    1.6.1 响应状态码 13 1.6.2 响应首部 14 1.7 URI 15 1.8 HTTP/2简介 16 1.9 Web应用的各个组成部分 16 1.9.1 处理器 17 1.9.2 模板引擎 18 1.10 Hello Go 18 1.11 小结 21 第2章 ...

    MySQL 5.1官方简体中文参考手册

    1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 源码光盘

    4.2.4 通信错误与通信设备状态 95 4.2.5 串行通信事件 96 4.3 Windows API串行通信函数 97 4.4 Win32 API串口通信编程的一般流程和特殊实例 116 4.4.1 Win32 API串口通信编程的一般流程 116 4.4.2 用查询方式读串口 ...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 第二版 电子版

    4.2.4 通信错误与通信设备状态 95 4.2.5 串行通信事件 96 4.3 Windows API串行通信函数 97 4.4 Win32 API串口通信编程的一般流程和特殊实例 116 4.4.1 Win32 API串口通信编程的一般流程 116 4.4.2 用查询方式读串口 ...

    MySQL5.1参考手册官方简体中文版

    1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    由国内著名技术社区联合推荐的2012年IT技术力作:《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》,即将上架发行,此书从Web应用、数据备份与恢复、网络存储应用、运维监控与性能优化、集群高级应用等...

    JavaScript王者归来part.1 总数2

     15.9 userData与cookie的对比   15.10 userData示例--一个利用userData实现客户端保存表单数据的例子   15.11 总结   第四部分 数据交互  第16章 同步和异步  16.1 什么是同步和异步   16.2 超时设定和...

    易语言程序免安装版下载

    操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...

    asoft签到管理系统tykq3.5_build20110125

    5、增加新便签弹出、新公告弹出用户私人定制功能,任何用户可以根据自己的需要打开或者关闭该功能。 6、增加登陆开关验证码功能,现在您可以关闭“烦人”的验证码了。 7、嵌入Service Pack中心,现在您可以进行...

    东方标准网络营销内部SEO记录系统 v2.0.zip

    3.网站外部链接存在状态批量检测功能 4.网络负面监控功能 5.外部推广账号管理系统 6.网站收录相关数据监控 7.网络营销咨询数据登记分析系统 8.网络编辑 网站推广工作任务统计(代码可整合进外网同步录入) 9....

    Computer Networking - A Top Down Approach, 7th, converted .pdf

    2.4.2/与HTTP的对比/78 2.4.3/邮件报文格式和MIME/79 2.4.4/邮件访问协议/81 2.5/DNS:因特网的目录服务/84 2.5.1/DNS提供的服务/85 2.5.2/DNS工作机理概述/86 2.5.3/DNS记录和报文/90 2.6/P2P应用/94 2.6.1/P2P文件...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例302 批量打印条形码 实例303 打印连续号码的标签 10.9 其他格式报表打印 实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例302 批量打印条形码 实例303 打印连续号码的标签 10.9 其他格式报表打印 实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印...

    zookeeper淘宝实现的监控

    /YINSHI.MONITOR.ALIVE.CHECK 定期进行三次如下流程 : 节点连接 – 数据发布 – 修改通知 – 获取数据 – 数据对比, 在指定的延时内,三次流程均成功视为该节点处于正常状态。 如何安装部署 一、直接部署 1. ...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    含本书全部源码(1-16章) 共399个实例:第1章 窗体与界面设计 1.1 菜单应用实例 cc实例001 在系统菜单中添加菜单项 cc实例002 带图标的程序菜单 cc实例003 根据表中数据动态生成菜单 cc实例004 浮动的菜单...

    vc++ 应用源码包_1

    内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件与文件夹属性操作、文件与文件夹系统操作、系统控制操作、程序...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     1.1 菜单应用实例   cc实例001 在系统菜单中添加菜单项   cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单   cc实例004 浮动的菜单   1.2 弹出菜单应用实例   cc实例005 在...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     1.1 菜单应用实例   cc实例001 在系统菜单中添加菜单项   cc实例002 带图标的程序菜单   cc实例003 根据表中数据动态生成菜单   cc实例004 浮动的菜单   1.2 弹出菜单应用实例   cc实例005 在...

Global site tag (gtag.js) - Google Analytics