首页
学习
活动
专区
圈层
工具
发布

HTTP 重定向乱套?301、302、307、308 的差别与使用场景

一句话承诺:用时序图和表格,快速选对重定向码,避免缓存与方法变更带来的坑。...对照表 状态码 是否缓存 方法是否改变 典型用途 301 Moved Permanently 可缓存 可能变更 域名迁移,长期重定向 302 Found 不建议缓存 可能变更 临时重定向 307 Temporary...Redirect 不缓存 方法不变 POST保持POST 308 Permanent Redirect 可缓存 方法不变 永久重定向且方法不变 Nginx配置示例 server { listen...https://upload.example.com$request_uri; } } 少量解释 301/308可被缓存,适合永久迁移;307保证方法不变,适合上传跳转。...明确使用场景能避免 POST 被意外改为 GET。 常见坑与替代法 坑:301导致错误缓存长期生效。替代:上线前充分验证再发布。 坑:302在部分客户端变更方法。替代:使用307确保方法不变。

1.6K10

使用结构化的标头字段改善HTTP

Nottingham 译 / 孟舒贤 审校 / 蒋默邱泽 原文 / https://www.fastly.com/blog/improve-http-structured-headers ●HTTP标头有什么问题...● 大多数Web开发人员都熟悉HTTP标头;如Content-Length、Cache-Control和Cookie之类。...因为标头需要由许多不同的客户端和服务器,代理服务和CDN处理(通常在消息的生存期内不止一次),所以大家希望它们易于处理,高效解析并且定义明确句法。...这允许新头字段的作者根据这些类型定义它。例如,他们可以说“这是一个字符串列表”,人们将知道如何使用一个现成的库来明确地解析和生成标头,而不是编写特定于头的代码。...,许多Cache-Control报头都是有效的“结构化字段”,即使它没有定义为一个: Cache-Control: max-age=3600, immutable 很不幸你还不能将结构化字段用于现有的标头

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C# HTTP系列5 HttpWebResponse.StatusCode属性

    接收到此状态时的默认操作为遵循与响应关联的 Location 标头。 原始请求方法为 POST 时, 重定向的请求将使用 GET 方法。 移动是的同义词MovedPermanently。...使用条件请求标头,如: If-match、 设置条件 If-None-匹配项,或如果-以未修改形式-自。...原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 重定向是的同义词找到。 RedirectKeepVerb 307 等效于 HTTP 状态 307。...作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 标头中指定的 URI。 用 GET 生成对 Location 标头所指定的资源的请求。...接收到此状态时的默认操作为遵循与响应关联的 Location 标头。 原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。

    3.2K20

    HTTP响应状态码:除了404,还有啥?

    · 203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息。...严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。...· 411 - Length Required (需要有效长度) 服务器不会接受包含无效内容长度标头字段的请求,除非客户发送一个Content-Length头。

    3.2K20

    手给 Safari 提了一个Bug,让我意外收获了这些新知识

    这里还发现了一个有意思的细节:Safari 在发起重定向请求时,虽然没有带上 Authorization 请求头,但是会带上 cookie,这也说明了为什么在改造为 JWT 之前,Safari 能正常使用的原因...然后我又在 Chrome 中进行了相同的测试,发现 Chrome 在发起重定向请求时,会携带 Authorization 请求头,所以能够正常使用。...,通过 Proxyman 将请求的响应码改为 308 后,发现 Safari 依旧不会携带 Authorization 请求头。...不过统一处理也存在一些不合理的场景,比如使用 Node.js 做 HTTP 代理服务时,转发后的请求头都自动变为小写了,那么会导致下层服务获取不到原始的请求头字段,这样会在传输的过程中破坏原始数据[参考...XMLHttpRequest 用 XMLHttpRequest 写了一个 Demo,发现浏览器也是会自动对重定向做出处理,打印的是重定向后最终的状态码,值为 200,并不会打印 307,并且会获取到重定向后的返回值

    2.3K20

    知识分享之规范——HTTP 状态码

    103 早期提示 主要用于与Link标头一起使用。它建议用户代理在服务器准备最终响应时开始预加载资源。 2xx 状态码 [成功] 状态码 描述 200 好 表示请求成功。...此响应仅在由Cache-ControlorExpires标头字段指示时才可缓存。 303 查看其他 响应可以在不同的 URI 下找到,并且应该在该资源上使用 GET 方法检索。...307临时重定向 指示客户端使用先前请求中使用的相同方法从另一个 URI 获取请求的资源。它与302 Found之前请求中使用的相同 HTTP 方法类似,但有一个例外。...308 永久重定向(实验性) 指示资源现在永久位于由Location标头指定的另一个 URI。它与301 Moved Permanently之前请求中使用的相同 HTTP 方法类似,但有一个例外。...客户端可以使用合适的 Authorization 头域重复请求 402 需要付款(实验性) 保留供将来使用。它旨在用于数字支付系统。 403 禁止 未经授权的请求。客户端没有内容的访问权限。

    3.4K30

    HTTP1.1协议状态码

    服务器必须使用101(交换协议)响应中的Upgrade标头字段来指示正在交换的协议。...否则(即,条件GET使用弱验证器),响应中不得包含其他实体标头;这样可以避免缓存的实体与更新的标头之间的不一致。...---- 307 Temporary Redirect (临时重定向) 所请求的资源临时位于其他URI下。由于重定向有时可能会改变,所以客户端应该继续使用Request-URI来处理以后的请求。...如果响应GET或HEAD以外的请求而收到307状态码,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会更改发出请求的条件。...响应必须包括一个WWW-Authenticate头域(第14.47节),该头域包含适用于所请求资源的质询。客户端可以使用合适的Authorization标头字段重复请求(第14.8节))。

    4.1K40

    Http Response Code

    203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。...严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...服务器告诉客户,原来缓冲的文档还可以继续使用。 305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。 403 Forbidden 资源不可用。

    1.5K30

    网站状态码大全

    203  Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。...严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填 写合适的Authorization头后再次发出请求。...服务器返回503时可以提供一个 Retry-After头。 504  Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。

    2.1K20

    HTTP错误代码汇总

    203 non-authoritative information 文档已经正常的返回,但一些应答头可能不正确,因为使用的是的文档的拷贝(HTTP 1.1新)。     ...服务器告诉客户,原来缓冲的文档还可以继续使用。     305 use proxy 客户请求的文档应该通过location 头所指明的代理服务器提取(HTTP 1.1新)。     ...307 temporary redirect 和302(found)相同,许多浏览器会错误的相应302应该进行重定向,即使原来的请求是post,即使它实际上只在post请求的应答是303时,才能重定向。...由于这个原因,HTTP1.1新增了307,以便更加清楚的区分几个状态代码,当出现303应答时,浏览器可以跟随重定向的get和post请求,如是307应答,则浏览器只能跟随对get的请求的重定向。   ...应答中会包含-WWW-Authenticate头,浏览器据此显示用户名字和密码对话框,然后再填写合适的authorization头后再次发送请求。     403 Forbidden 资源不可用。

    2.4K20

    HTTP 响应代码

    HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求消息 201 Created 该请求已成功,并因此创建了一个新的资源。...306 unused 在最新版的规范中,306 状态码已经不再被使用。 307 Temporary Redirect 请求的资源现在临时从不同的URI 响应请求。...308 Permanent Redirect 这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI。...该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。...客户端可以返回一个 Proxy-Authorization 信息头用以验证。 408 Request Timeout 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。

    2.3K10

    HTTP状态码及其含义

    严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...服务器告 诉客户,原来缓冲的文档还可以继续使用。 305 Use Proxy:客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。...306 (unused):未使用。 307 Temporary Redirect:和302 (Found)相同。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填 写合适的Authorization头后再次发出请求。

    2.5K20

    YAML+PyYAML笔记 4 | YAML字符流、节点属性、块伸缩标头使用

    1.2 字符流解析使用PyYAML库读取YAML字符流;通过load_all函数,将字符流中的每个文档解析为YAML对象;由于一个文档可能包括多个对象,因此需要使用循环逐个读取每个文档,然后解析其中的对象...123 name: xiaowang age: 99 grades: math: 100 science: 100 history: 1003 块伸缩标头块是一种结构...,为结构化数据提供缩进关系的文本块;块之间的关系可以使用细节和更高的缩放级别进行解释和表述;块伸缩标头就是定义块扩展和缩放的一种方法,可以使 YAML 代码的可读性和可维护性更高。...# 块缩进级别为 0name: Johnage: 25address: street: 123 Main St city: Anytown state: CA zip: 12345# 使用 '+...name: Jane age: 30 address: +street: 123 Main St +city: Anytown +state: CA +zip: 12345# 使用

    85440

    HTTP响应代码详解

    HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求消息 201 Created 该请求已成功,并因此创建了一个新的资源。...306 unused 在最新版的规范中,306 状态码已经不再被使用。 307 Temporary Redirect(常见) 请求的资源现在临时从不同的URI 响应请求。...308 Permanent Redirect 这意味着资源现在永久位于由 Location: HTTP Response 标头指定的另一个 URI。...该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。...客户端可以返回一个 Proxy-Authorization 信息头用以验证。 408 Request Timeout 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。

    2K00

    分享一些整理的HTTP状态码及其详解

    307 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。...该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。...307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。...411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。...417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。 5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

    1.3K10

    温故知新 .Net重定向深度分析

    :Server对象的Transfer方法使用服务器执行重定向,并避免HTTP请求 关键区别是发生转移的地方: ?...Server.Transfer("/default.aspx");// 由于使用了Web服务器的工作进程,因此Server.Transfer方法的目标URL必须是同一服务器上的虚拟路径,因此您不能使用包含...第一,二次重定向发生在SSO、website1不同域之间的重定向(其中第二次是Post请求之后302重定向),只能使用Client Redirect; 第三次由 http://www.website1....307 “临时重定向”   指示所请求的资源已被临时移动到Location标头提供的URL; 307和302之间的唯一区别是307保证在发出重定向请求时,Method和Body不会更改,当重定向地址是非...总结:本文简要分析了Client Redirect,Server Redirect的核心差异、使用场景; 最后给出了HTTP 3XX响应码的标准规范。

    2.1K20

    HTTP报错序号以及对应错误原因最全总结(1XX、2XX、3XX、4XX、5XX)

    · 203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(HTTP 1.1新)。...严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...服务器告诉客户,原来缓冲的文档还可以继续使用。 · 305 - Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在 填写合适的Authorization头后再次发出请求。

    7.1K10

    小结HTTP状态码

    3xxs –重定向:你的请求被重定向到了其他地方。服务器收到了请求,但是有某种重定向。 4xxs – 客户端错误:客户端发生错误,导致服务器无法处理请求。...101 Switching Protocol:该状态码是响应客户端Upgrade标头发送的,并且指示服务器也正在切换协议。...HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求信息。...304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。请求的时候一般结合If-Modified-Since头部使用。 307 Temporary Redirect:307的意义如上302。...比如,使用POST请求始终就该用POST请求。 备注:307和303已经替代了历史上的302状态码,现在看到的临时重定向的状态码是307。详细内容可到维基百科上查看。

    1.7K20
    领券