POST/GET 与 CORS 中的 PUT/DELETE

POST/GET Vs PUT/DELETE in CORS

我刚刚阅读 this:

same-origin policy allows inter-origin HTTP requests with GET and POST methods but denies inter-origin PUT and DELETE requests

PUT/DELETE有什么特别之处?他们为什么被封锁?无论如何,您可以在 POST 方法中执行 update/delete。

对于 CORS,如果 POST 请求使用 xml/json 而不是 application/x-www-form-urlencoded,为什么它会被预检?

请解释为什么有些动词与其他动词的处理方式不同。

根本区别在于用户浏览网页触发的请求类型和脚本触发的请求类型。这种区别植根于网络历史,基于早期浏览器认为安全和不安全的内容。所有浏览器都试图保持向后兼容性,以免违反依赖早期 事实上 标准的服务器的期望。

用户浏览网页时会产生什么样的请求?基本上,GET 请求和 POST 请求由表单提交触发。浏览器总是允许这样的 cross-origin 请求,因此他们假定服务器是为处理它们而设计的。但这不包括,例如,具有只能通过脚本添加的自定义 headers 的 POSTS。 (有关使请求安全与否的准确描述,请参阅 Fetch specification。)

查看我的回答here,详细了解 CORS 如何使用预检请求来保持与同源策略的向后兼容性。