在后端已经设置了 CORS 的 Access-Control-Allow-Origin
请求头后,如果 AJAX 请求时设置了自定义请求头,依然会报跨域的问题。报错的信息大概是 Access to XMLHttpRequest at 'http://xuanshang.test/login/dev' from origin 'http://practice.test' has been blocked by CORS policy: Request header field dev-token is not allowed by Access-Control-Allow-Headers in preflight response
。这是因为如果要设置自定义请求头,后端还需要根据是否是 OPTIONS
请求方法,设置允许的请求头。这个 OPTIONS 请求称为 预检请求
,是浏览器在必要的时候,自动发出的。以获取被允许的请求头、请求方法。
1 | if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { |