![进行 API 调用时出现 CORS 和 Preflight 问题](https://linux22.com/image/762715/%E8%BF%9B%E8%A1%8C%20API%20%E8%B0%83%E7%94%A8%E6%97%B6%E5%87%BA%E7%8E%B0%20CORS%20%E5%92%8C%20Preflight%20%E9%97%AE%E9%A2%98.png)
我的软件有一些 CORS 和预检问题,我无法解决。为了测试它,我使用了一个 cors 测试站点来模拟它。当我向我的服务器应用程序发出 api 请求时,我收到以下错误:
Access to XMLHttpRequest at 'https://example.org/api/articles/2387' from origin 'https://www.test-cors.org' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
我在 .htaccess 文件末尾添加了以下代码,但仍然出现相同的错误:
<IfModule mod_headers.c>
Header append X-Frame-Options SAMEORIGIN
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "*, Authorization, authorization"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine on
# always return 200 for preflight OPTIONS requests
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
服务器还返回“状态代码:401 未授权”。作为请求标头,我添加了一个授权标头(示例字符串):
Authorization: Basic DJFNCNDJKS7574hdfnDDBHr4593834nfnd=
但这是正确的授权,因为我在本地使用 curl 测试了完全相同的标头几次(没有跨源),并且始终能获得请求的数据。您知道这里发生了什么吗?我该如何解决?
编辑:我让它工作了。我首先将附加的 htaccess 内容放在文件末尾。由于我将其添加到文件开头,因此它工作正常。