是否对同一源域的 ajax 调用进行了预检请求?

问题描述

answer 声明,X-Requested-With 标头防止 CSRF 攻击的一种方式是,如果服务器不允许,那么现代浏览器将不允许 javascript 代码添加此标头。如果标头存在,服务器可以确保请求不是来自用户可能打开的另一个页面

据我了解,浏览器确定在 ajax 请求中是否允许自定义标头的方式是通过发出预检请求。然后服务器以标头 Access-Control-Allow-Headers 响应。其中包含相关请求允许的标头列表。因此,如果服务器返回一个空列表,则 CORS ajax 调用不能存在 xhr 标头。表示不同的来源。

所以我的问题是,如果原点相同,是否会触发预检请求。因为如果是,那么服务器会说不要添加任何标头,如果浏览器不添加,那么来自其自身来源的请求将与其他来源无法区分。

解决方法

所以我的问题是如果来源相同,是否会触发预检请求。

不,不是。

因为如果是,那么服务器会说不要添加任何标头,如果浏览器不添加,那么来自其自身来源的请求将与另一个来源无法区分。

浏览器不发送预检请求不会阻止服务器测试实际请求头并在它不存在时抛出错误。