【问题标题】:CORS response for request with unsupported methods使用不受支持的方法对请求的 CORS 响应
【发布时间】:2017-11-07 14:59:40
【问题描述】:

我想知道服务器应该如何响应请求不受支持的方法的 CORS 请求。

我有服务器端点,比如说server.com/endpoint,它只支持 GET。但是客户端正在发送带有标头的 CORS OPTIONS 请求:

Origin: another.com
Access-Control-Request-Method: POST

应该如何正确响应?它应该返回一些关于不支持的 POST 方法的错误消息,还是只返回带有典型 CORS 响应标头的 200 OK,例如:

Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: another.com

或者我应该将其视为没有 CORS 标头的请求?

如果请求中有一些随机来源,还应该返回什么?我应该透露允许哪些来源还是隐藏它并且不返回“Allow”标题?

【问题讨论】:

    标签: rest http web cors


    【解决方案1】:

    我想知道服务器应该如何响应请求不受支持的方法的 CORS 请求。

    我有服务器端点,比如说server.com/endpoint,它只支持 GET。但是客户端正在发送带有标头的 CORS OPTIONS 请求:

    Origin: another.com
    Access-Control-Request-Method: POST
    

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests 解释了正在发生的事情:OPTIONS 是浏览器自己作为 CORS 协议的一部分自动发送的预期请求。

    应该如何正确响应?它是否应该返回一些关于不支持的 POST 方法的错误消息

    不,在您的服务器端按预期支持 CORS 协议不需要您针对这种情况发送任何特殊的错误响应。浏览器只是将正常响应中缺少“Allow”标头解释为服务器不允许接收到的请求类型。

    或者只返回 200 OK 并带有典型的 CORS 响应标头,例如:

    Access-Control-Allow-Methods: GET
    Access-Control-Allow-Origin: another.com
    

    在您从允许的来源another.com 收到请求但对于不受支持的方法(例如,POST,如果您不不支持)。这使浏览器能够在客户端记录特定的 CORS 错误,让开发人员知道问题是不允许的方法,而不是根源。

    如果请求中有一些随机来源,还应该返回什么?我应该透露哪些来源是允许的还是隐藏起来并且不返回“Allow”标头?

    在非允许来源的情况下,您可以不返回“Allow”标头。从来没有必要透露允许的来源,除了允许的来源。 (无论如何,Access-Control-Allow-Origin 值总是只包含一个单一来源,或者 * 通配符,因此没有随机来源发出请求将能够嗅出所有允许的来源。)

    需要明确的是,CORS 协议绝不要求服务器使用任何 CORS 标头来响应随机的非允许来源。该协议的语义是这样的,对于浏览器来说,响应完全没有“Allow”标头,“此服务器不允许来自您的来源的跨域请求”时间>。一个随机的非允许来源不需要更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多