在 CORS 中,是不是已预先发送带有凭据的 POST 请求?
Posted
技术标签:
【中文标题】在 CORS 中,是不是已预先发送带有凭据的 POST 请求?【英文标题】:In CORS, Are POST request with credentials pre-flighted ?在 CORS 中,是否已预先发送带有凭据的 POST 请求? 【发布时间】:2016-08-05 09:56:08 【问题描述】:在MDN Access Cotrol doc 中,没有预检带有凭据的 GET 请求。但是,如果响应标头不包括 Access-Control-Allow-Credentials: true 那么调用客户端将无法使用响应。如果这种行为与 POST(带有凭据的简单 POST 请求 - 内容类型可能是表单数据)请求相同,则存在 POST 可能会更改服务器状态的风险,尽管客户端可能无法获得响应。这个假设正确吗?
OR POST 请求带有预先发送的凭据?
【问题讨论】:
【参考方案1】:预检请求旨在阻止浏览器向服务器发送某些类型的请求,除非服务器明确允许。但是,在 CORS 支持出现之前,浏览器已经可以直接向服务器发送有凭据的 POST 请求。
"Security Considerations" part of the CORS spec 说(强调我的):
在本规范之外生成的简单跨域请求(例如使用 GET 或 POST 的跨域表单提交或由脚本元素产生的跨域 GET 请求)通常包含用户凭据,因此 符合本规范的资源必须始终准备好接受带有凭据的简单跨域请求。
换句话说,无需预检就可以让经过认证的 POST 请求到达服务器并不是什么新鲜事:自从浏览器支持<form>
s 以来,开发人员就能够实现这一点。因此,要求对 Ajax 进行包含有凭据的 POST 请求的预检没有任何好处。
【讨论】:
以上是关于在 CORS 中,是不是已预先发送带有凭据的 POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# WebAPI 中,如何配置 CORS 以允许带有凭据和 json 内容的 POST 请求?
带有凭据的 Webpack-dev-server CORS 错误