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 很不幸你还不能将结构化字段用于现有的标头
接收到此状态时的默认操作为遵循与响应关联的 Location 标头。 原始请求方法为 POST 时, 重定向的请求将使用 GET 方法。 移动是的同义词MovedPermanently。...使用条件请求标头,如: If-match、 设置条件 If-None-匹配项,或如果-以未修改形式-自。...原始请求方法为 POST 时,重定向的请求将使用 GET 方法。 重定向是的同义词找到。 RedirectKeepVerb 307 等效于 HTTP 状态 307。...作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 标头中指定的 URI。 用 GET 生成对 Location 标头所指定的资源的请求。...接收到此状态时的默认操作为遵循与响应关联的 Location 标头。 原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。
· 203 - Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息。...严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。...由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。...应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。...· 411 - Length Required (需要有效长度) 服务器不会接受包含无效内容长度标头字段的请求,除非客户发送一个Content-Length头。
这里还发现了一个有意思的细节:Safari 在发起重定向请求时,虽然没有带上 Authorization 请求头,但是会带上 cookie,这也说明了为什么在改造为 JWT 之前,Safari 能正常使用的原因...然后我又在 Chrome 中进行了相同的测试,发现 Chrome 在发起重定向请求时,会携带 Authorization 请求头,所以能够正常使用。...,通过 Proxyman 将请求的响应码改为 308 后,发现 Safari 依旧不会携带 Authorization 请求头。...不过统一处理也存在一些不合理的场景,比如使用 Node.js 做 HTTP 代理服务时,转发后的请求头都自动变为小写了,那么会导致下层服务获取不到原始的请求头字段,这样会在传输的过程中破坏原始数据[参考...XMLHttpRequest 用 XMLHttpRequest 写了一个 Demo,发现浏览器也是会自动对重定向做出处理,打印的是重定向后最终的状态码,值为 200,并不会打印 307,并且会获取到重定向后的返回值
103 早期提示 主要用于与Link标头一起使用。它建议用户代理在服务器准备最终响应时开始预加载资源。 2xx 状态码 [成功] 状态码 描述 200 好 表示请求成功。...此响应仅在由Cache-ControlorExpires标头字段指示时才可缓存。 303 查看其他 响应可以在不同的 URI 下找到,并且应该在该资源上使用 GET 方法检索。...307临时重定向 指示客户端使用先前请求中使用的相同方法从另一个 URI 获取请求的资源。它与302 Found之前请求中使用的相同 HTTP 方法类似,但有一个例外。...308 永久重定向(实验性) 指示资源现在永久位于由Location标头指定的另一个 URI。它与301 Moved Permanently之前请求中使用的相同 HTTP 方法类似,但有一个例外。...客户端可以使用合适的 Authorization 头域重复请求 402 需要付款(实验性) 保留供将来使用。它旨在用于数字支付系统。 403 禁止 未经授权的请求。客户端没有内容的访问权限。
默认操作是将此状态视为重定向,并遵循与此响应关联的 // Location 标头的内容。...默认操作是将此状态视为重定向,并遵循与此响应关联的 // Location 标头的内容。...接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。...接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。...接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。
服务器必须使用101(交换协议)响应中的Upgrade标头字段来指示正在交换的协议。...否则(即,条件GET使用弱验证器),响应中不得包含其他实体标头;这样可以避免缓存的实体与更新的标头之间的不一致。...---- 307 Temporary Redirect (临时重定向) 所请求的资源临时位于其他URI下。由于重定向有时可能会改变,所以客户端应该继续使用Request-URI来处理以后的请求。...如果响应GET或HEAD以外的请求而收到307状态码,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会更改发出请求的条件。...响应必须包括一个WWW-Authenticate头域(第14.47节),该头域包含适用于所请求资源的质询。客户端可以使用合适的Authorization标头字段重复请求(第14.8节))。
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 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。
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 资源不可用。
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 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。
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 资源不可用。
严格地说,我们只能假定只有当原来的请求是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头后再次发出请求。
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 请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。
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# 使用
请求标头 请求标头用于客户端发送 HTTP 请求到服务器中所使用的字段,下面我们一起来看一下 HTTP 请求标头都包含哪些字段,分别是什么意思。...详细关于 Authorization 的信息,后面也会详细解释 Expect Expect HTTP 请求标头指示服务器需要满足的期望才能正确处理请求。...Proxy-Authorization Proxy-Authorization 是属于请求与认证的范畴,我们在上面提到一个认证的 HTTP 标头是 Authorization,不同于 Authorization...ETag: W/"0815" Location Location 响应标头表示 URL 需要重定向页面,它仅仅与 3xx(重定向) 或 201(已创建) 状态响应一起使用。...下面是一个页面重定向的过程 ? 使用首部字段 Location 可以将响应接受方引导至某个与请求 URI 位置不同的资源。
2、Content-Type头需要设置为application/json。设置自定义Header需要使用XMLHttpRequests,而它还会向服务器端发送OPTIONS预检请求。...跳转来绕过http自定义头限制,307跟其他3XX HTTP状态码之间的区别就在于,HTTP 307可以确保重定向请求发送之后,请求方法和请求主体不会发生任何改变。...HTTP 307会将POST body和HTTP头重定向到我们所指定的最终URL,并完成攻击。...apache的php页面作为服务端(首选方法): 我们也可以使用php来作为307跳转的服务端,参考GitHub上的swf_json_csrf。...其实Flash的Header存在一个黑名单,黑名单列表的头不允许设置,其中就有Referer。
307 请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。...该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。...307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。...411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。...417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。 5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
: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响应码的标准规范。
3xxs –重定向:你的请求被重定向到了其他地方。服务器收到了请求,但是有某种重定向。 4xxs – 客户端错误:客户端发生错误,导致服务器无法处理请求。...101 Switching Protocol:该状态码是响应客户端Upgrade标头发送的,并且指示服务器也正在切换协议。...HEAD:实体标头位于消息正文中。 POST:描述动作结果的资源在消息体中传输。 TRACE:消息正文包含服务器收到的请求信息。...304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。请求的时候一般结合If-Modified-Since头部使用。 307 Temporary Redirect:307的意义如上302。...比如,使用POST请求始终就该用POST请求。 备注:307和303已经替代了历史上的302状态码,现在看到的临时重定向的状态码是307。详细内容可到维基百科上查看。
领取专属 10元无门槛券
手把手带您无忧上云