Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对无效CORS请求的预期响应是什么?_Cors - Fatal编程技术网

对无效CORS请求的预期响应是什么?

对无效CORS请求的预期响应是什么?,cors,Cors,CORS规范没有说明服务器应该如何响应无效的CORS请求。例如,如果请求源无效,则“终止这组步骤。请求不在本规范的范围内。”对于其他错误情况,例如请求无效的方法或头,也有类似的语言 在CORS错误的情况下,预期的响应应该是什么?我知道不同的服务器可能需要不同的行为。但是我正在寻找一个或多个标准的响应,如果服务器所有者不在乎的话,这些响应是可以接受的。我希望这取决于错误的性质,但我希望出现一些4xx错误,例如403(如果请求不符合某些要求的标准)或404(如果方法不可用)。是,我意识到我在回答我自

CORS规范没有说明服务器应该如何响应无效的CORS请求。例如,如果请求源无效,则“终止这组步骤。请求不在本规范的范围内。”对于其他错误情况,例如请求无效的方法或头,也有类似的语言


在CORS错误的情况下,预期的响应应该是什么?我知道不同的服务器可能需要不同的行为。但是我正在寻找一个或多个标准的响应,如果服务器所有者不在乎的话,这些响应是可以接受的。

我希望这取决于错误的性质,但我希望出现一些4xx错误,例如403(如果请求不符合某些要求的标准)或404(如果方法不可用)。

是,我意识到我在回答我自己的问题,但不管怎样,问题还是来了。我对此做了一些研究,行为似乎分为两大阵营:

1)如果CORS请求无效,则返回错误。这是项目采取的路线。这个图书馆还回来了

  • 400不符合规范的请求的错误请求
  • 403禁止使用无效的源或头
  • 405方法不允许使用无效的方法
2)在响应中返回CORS标题,让浏览器整理访问细节。这似乎是更常见的方法,Amazon S3、SoundCloud、FourSquare和Spotify的API都使用这种方法(后两种API只支持简单的CORS请求)。在这种情况下,服务器不做任何错误检查,只返回支持的源、方法和头的CORS头。浏览器仍会发出请求,但如果CORS响应头与用户的请求不匹配,则浏览器会拒绝用户的响应

这些方法各有利弊。方法#1更符合CORS规范,但没有向用户提供有用的调试信息

方法#2提供了对支持的方法和头的更多了解。这也更容易实现,因为不管请求头是什么,服务器都返回相同的响应头。然而,这是以实际在服务器端执行请求为代价的,即使浏览器会阻止用户的响应。对于具有副作用的方法(如POST、PUT或DELETE),这可能是不可取的,并强调了CORS不应用作身份验证机制的事实


(请注意,我上面的研究并非详尽无遗。很难看到许多API的真实行为,因为它们要么需要身份验证,要么因为其他错误(如不支持的方法)而在不同级别阻止请求。)

我只想补充一下Monsur的答案存在另一种行为(S3当前正在使用的行为):

  • 仅在CORS响应头与请求的来源匹配时发送CORS响应头。否则,根本不发送任何CORS头,让您的浏览器或任何其他客户端自行决定

  • 至少对我来说是这样的


    另外,在Java中,发送403也是很常见的。Java链接非常古老,但Java中事实上的标准Spring方法是相同的。请参阅我的参考资料。

    可以说,服务器可以有一个逻辑分支,它遵循您的建议2,而不在服务器上执行代码。@先生,说方法2向用户返回调试信息是错误的。此“调试信息”仅适用于开发人员工具。有。还有另一种选择#3:简单地终止底层连接。S3甚至不会在没有匹配的情况下发送任何内容。