为什么 POST 请求不总是预检?

Why aren't POST requests always preflighted?

根据 MDN,如果 Content-Type 是 application/x-www-form-urlencodedmultipart/form-datatext/plain 中的任何一个,POST 请求不会进行预检。

但是 multipart/form-data 不是和 application/xml 一样不安全吗?例如,我希望对 url http://bank.com/money-orders/ 的跨源 POST 请求始终被禁止,无论端点接受的内容类型如何。

因为:甚至在构想 CORS 之前,发送 cross-origin POST 请求是可能的,例如,从一个来源向另一个来源发送结果的网页用户在一个来源的页面上填写表格并单击 提交 按钮将其发送到另一个来源。

所以,基本上,CORS 不会改变这种行为——它不会阻止或禁止它,因为在 CORS 出现之前它已经是可能的并且被允许了。

虽然那时候,没有办法在这样的 POST 请求中发送自定义 headers。但 CORS 使这成为可能——发出一种服务器以前从未见过或必须处理的新型请求。所以,预检的目的基本上是对服务器说,这里是这种新类型的 POST(或 GET),你必须表明你是 opting-in 并且可以(或新方法) .

但是,如果 POST 请求与 Web 上基本上始终允许的那种简单 POST 请求没有任何不同,则不需要向服务器发送 heads-up已经.