一文带你了解 HTTP 黑科技( 十 )


Access-Control-Allow-Credentials: true凭证一般包括 cookie、认证头和 TLS 客户端证书

当用作对预检请求响应的一部分时 , 这表明是否可以使用凭据发出实际请求 。注意简单的 GET 请求不会进行预检 。
可以参考一个实际的例子 https://www.jianshu.com/p/ea485e5665b3
Access-Control-Allow-HeadersAccess-Control-Allow-Headers 是一个响应标头 , 这个标头用来响应预检请求 , 它发出实际请求时可以使用哪些HTTP标头 。
示例
  • 自定义标头
这是 Access-Control-Allow-Headers 标头的示例 。它表明除了像 CROS 安全列出的请求标头外 , 对服务器的 CROS 请求还支持名为 X-Custom-Header 的自定义标头 。
Access-Control-Allow-Headers: X-Custom-Header
  • 多个标头
这个例子展示了 Access-Control-Allow-Headers 如何使用多个标头
Access-Control-Allow-Headers: X-Custom-Header, Upgrade-Insecure-Requests
  • 绕过其他限制
尽管始终允许使用 CORS 安全列出的请求标头 , 并且通常不需要在 Access-Control-Allow-Headers 中列出这些标头 , 但是无论如何列出它们都将绕开适用的其他限制 。
Access-Control-Allow-Headers: Accept这里你可能会有疑问 , 哪些是 CORS 列出的安全标头?(别嫌累 , 就是这么麻烦)
有下面这些 Accep、Accept-Language、Content-Language、Content-Type  , 当且仅当包含这些标头时 , 无需在 CORS 上下文中发送预检请求 。
Access-Control-Allow-MethodsAccess-Control-Allow-Methods 也是响应标头 , 它指定了哪些访问资源的方法可以使用预检请求 。例如
Access-Control-Allow-Methods: POST, GET, OPTIONSAccess-Control-Allow-Methods: *Access-Control-Expose-HeadersAccess-Control-Expose-Headers 响应标头表明哪些标头可以作为响应的一部分公开 。默认情况下 , 仅公开6个CORS安全列出的响应标头 , 分别是
  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma
如果希望客户端能够访问其他标头 , 则必须使用 Access-Control-Expose-Headers 标头列出它们 。下面是示例
要公开非 CORS 安全列出的请求标头 , 可以像如下这样指定
Access-Control-Expose-Headers: Content-Length要另外公开自定义标头 , 例如 X-Kuma-Revision , 可以指定多个标头 , 并用逗号分隔
Access-Control-Expose-Headers: Content-Length, X-Kuma-Revision在不是凭证请求中 , 你还可以使用通配符
Access-Control-Expose-Headers: *但是 , 这不会通配 Authorization 标头 , 因此如果需要公开它 , 则需要明确列出
Access-Control-Expose-Headers: *, AuthorizationAccess-Control-Max-AgeAccess-Control-Max-Age 响应头表示预检请求的结果可以缓存多长时间 , 例如
Access-Control-Max-Age: 600 表示预检请求可以缓存10分钟
Access-Control-Request-Headers浏览器在发出预检请求时使用 Access-Control-Request-Headers 请求标头 , 使服务器知道在发出实际请求时客户端可能发送的 HTTP 标头 。
Access-Control-Request-Headers: X-PINGOTHER, Content-TypeAccess-Control-Request-Method同样的 , Access-Control-Request-Method 响应标头告诉服务器发出预检请求时将使用那种 HTTP 方法 。此标头是必需的 , 因为预检请求始终是 OPTIONS , 并且使用的方法与实际请求不同 。
Access-Control-Request-Method: POSTOriginOrigin 请求标头表明匹配的来源 , 它不包含任何信息 , 仅仅包含服务器名称 , 它与 CORS 请求以及 POST 请求一起发送 , 它类似于 Referer 标头 , 但与此标头不同 , 它没有公开整个路径 。例如
Origin: https://developer.mozilla.orgHTTP 条件请求HTTP 具有条件请求的概念 , 通过比较资源更新生成的值与验证器的值进行比较 , 来确定资源是否进行过更新 。这样的请求对于验证缓存的内容、条件请求、验证资源的完整性来说非常重要 。
原则HTTP 条件请求是根据特定标头的值执行不同的请求 , 这些标头定义了一个前提条件 , 如果前提条件匹配或不匹配 , 则请求的结果将有所不同 。


推荐阅读