3

MDN Access Cotrol doc中,没有预检带有凭据​​的 GET 请求。但是,如果响应标头不包括 Access-Control-Allow-Credentials: true 那么调用客户端将无法使用响应。如果这种行为与 POST(带有凭据的简单 POST 请求 - 内容类型可能是表单数据)请求相同,则存在 POST 可能会更改服务器状态的风险,尽管客户端可能无法获得响应。这个假设正确吗?

或 POST 请求带有预先发送的凭据?

4

1 回答 1

1

预检请求旨在阻止浏览器向服务器发送某些类型的请求,除非服务器明确允许。但是,在 CORS 支持出现之前,浏览器已经可以直接向服务器发送经过认证的 POST 请求。

CORS 规范的“安全注意事项”部分说(强调我的):

在本规范之外生成的简单跨域请求(例如使用 GET 或 POST 的跨域表单提交或由脚本元素产生的跨域 GET 请求)通常包括用户凭据,因此必须始终准备好符合本规范的资源以期望简单带有凭据的跨域请求

换句话说,无需预检就可以让经过认证的 POST 请求到达服务器并不是什么新鲜事:自从浏览器支持<form>s. 因此,要求对 Ajax 进行预检(包括有凭据的 POST 请求)没有任何好处。

于 2016-04-15T19:25:18.183 回答