【问题标题】:In the HTTP CORS spec, what's the difference between Allow-Headers and Expose-Headers?在 HTTP CORS 规范中,Allow-Headers 和 Expose-Headers 有什么区别?
【发布时间】:2015-03-22 08:20:49
【问题描述】:

在 HTTP CORS 规范中,5.6 Access-Control-Allow-Headers5.3 Access-Control-Expose-Headers 有什么区别?

[Allow-Headers] 标头表示,作为响应的一部分 预检请求,在预检过程中可以使用哪些标头字段名称 实际要求

更新:我希望有人会告诉我每个请求(飞行前)都会发送其中一个标头...但是,还有另一个标头用于此目的:5.9 Access-Control-Request-Headers

[Request-Headers] 标头指示在实际请求中将使用哪些标头作为预检请求的一部分

顺便说一句,我喜欢他们 (W3C) 如何谨慎地措辞 5.9,以便 请求标头 可以有一个名为 _Something_ Request Header 的字段。

我完全迷失在规范中,有没有图表可以让我更好地理解这个过程?

【问题讨论】:

    标签: http cors


    【解决方案1】:

    访问控制允许标头

    用于响应预检请求,以指示在发出实际请求时可以使用哪些 HTTP 标头。

    访问控制公开标头

    此标头允许服务器将允许浏览器访问的标头列入白名单。例如:

    来源: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

    【讨论】:

    • 所以,基本上这些名字都不好。前者是请求头,后者是对脚本可见的响应头,对吧?
    • MDN documentation 声明:“Access-Control-Allow-Headers 响应标头用于响应预检请求,以指示哪些 HTTP 标头将通过 Access-Control-Expose 可用- 发出实际请求时的标头。” 这是不正确的吗?
    • 如果请求有一个不包含在Access-Control-Allow-Headers 中的标头会发生什么。例如,服务器发回“A,B,C”,但真正的请求头是“A,B,C,D”。浏览器会拒绝发送真正的请求吗?
    【解决方案2】:

    只是为了澄清上面的评论,即这些名称错误,这些名称并没有错误。

    它们具有不同的功能。

    • Access-control-allow-headers 指定允许哪些标头更改服务器的状态。
    • 虽然Access-control-expose-headers 有一个get 方法,但getResponseHeader() 方法会返回特定响应标头的值。在 CORS 请求期间,getResponseHeader() 方法只能访问简单的响应标头。为了能够访问其他标头,您需要在此处指定它。

    【讨论】:

    • 它们具有不同的功能,但它们的名称非常相似。他们的名字肯定很糟糕。
    猜你喜欢
    • 2019-05-21
    • 2016-05-18
    • 1970-01-01
    • 2016-09-30
    • 2015-11-26
    • 2012-09-19
    • 2016-05-18
    • 2019-12-10
    • 2012-10-20
    相关资源
    最近更新 更多