我想知道服务器应如何响应请求不支持的方法的CORS请求。
我有服务器端点,比方说server.com/endpoint
只支持GET。但客户端正在发送带有标题的CORS OPTIONS请求:
Origin: another.com
Access-Control-Request-Method: POST
应该如何正确回应?它应该返回一些关于不支持的POST方法的错误消息,或者只返回200 OK
和典型的CORS响应头,如:
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: another.com
或者我可以将其视为没有CORS标头的请求吗?
在请求中有一些随机来源的情况下应该返回什么?我应该透露允许哪些来源或隐藏它并且不返回" 允许"标题?
答案 0 :(得分:0)
我想知道服务器应如何响应请求不支持的方法的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协议不要求您针对此情况发送任何特殊错误响应。浏览器只是解释缺少" 允许"正常响应中的标头意味着服务器不允许接收它的请求类型。
或只返回
200 OK
,其中包含典型的CORS响应标头,如:
Access-Control-Allow-Methods: GET
Access-Control-Allow-Origin: another.com
如果您从允许的来源another.com
获得请求,但是对于不受支持的方法(例如POST
,则支持CORS,这将是回应它的正确方法。 ,如果你不支持那个)。这使浏览器能够在客户端记录特定的CORS错误,让开发人员知道不允许的方法是问题,而不是原点。
在请求中有一些随机来源的情况下应该返回什么?我应该透露允许哪些来源或隐藏它并且不返回" 允许"标题?
你可以不返回" 允许"在非允许来源的情况下的标题。除了允许来源之外,从来没有必要透露允许的来源。 (无论如何,Access-Control-Allow-Origin
值总是只包含单个原点,或者包含*
通配符,因此没有随机来源发出请求将能够嗅出所有允许的来源。)
需要明确的是,CORS协议绝不要求服务器根据任何CORS标头响应随机非允许的起源。协议的语义是这样的,对于浏览器,没有" 允许"无论如何,“此服务器不允许来自您的来源的跨源请求”。随机的非允许来源不需要任何其他信息。