【发布时间】:2020-01-14 01:00:29
【问题描述】:
我正在尝试使用授权标头向我的 Wordpress REST API 发出 GET/POST 请求,但作为响应,我得到了
预检请求未通过访问控制检查:它没有 HTTP ok 状态。
我正在使用 JWT Authentication for WP-API 进行身份验证,并尝试了互联网上几乎所有可能的选项,但没有运气。
看看我当前的 .htaccess 配置
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
<IfModule mod_setenvif.c>
SetEnvIf Origin "^(http://localhost:3000)$" CORS=$0
</IfModule>
Header set Access-Control-Allow-Origin %{CORS}e env=CORS
Header set Access-Control-Allow-Credentials "true" env=CORS
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD" env=CORS
Header set Access-Control-Allow-Headers "*" env=CORS
Header set Access-Control-Expose-Headers "*" env=CORS
<FilesMatch "\.(php|html)$">
</FilesMatch>
</IfModule>
当从 axios 发出请求时出现此错误
从源“http://localhost:3000”访问“HIDDEN_SERVER_ADDRESS”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。
在 PostMan 中,调用工作正常并给出了预期的结果。
【问题讨论】:
-
“在 PostMan […]” - 无关紧要,这不是 CORS 首先应用的场景。
RewriteRule ^(.*)$ $1 [R=200,L]- 此时仅尝试设置状态代码,但请求仍会传递到处理此 URL 路由的任何脚本 - 因此,如果该脚本随后发出不同的状态代码,它将简单地覆盖它。跨度> -
我在发送 OPTION 标头时设置 200 状态代码,以便验证我的预检请求。有什么可能的解决方案?
-
“所以我的预检请求得到了验证” - 是的,除非 - 我刚才说的……仅仅因为你在 .htaccess 中设置了状态码,并不意味着你的 PHP脚本 - 仍然使用此请求方法调用 - 可能不会覆盖它。 (例如,如果它遇到致命错误,因为缺少预期的请求数据。)
标签: php wordpress apache rest cors