Safari不会在Apache上的Vue.js应用程序中加载预检CORS身份验证请求(XHR)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Safari不会在Apache上的Vue.js应用程序中加载预检CORS身份验证请求(XHR)相关的知识,希望对你有一定的参考价值。

我一直在研究和调试几个小时,没有运气。这个在Chrome上运行的流程/请求没有问题,但Safari和Firefox都在OPTIONS预检请求中死亡。 Safari记录两个错误:

(!) Failed to load resource: cancelled

(!) XMLHttpRequest cannot load http://{URL_REDACTED}/wp-json/jwt-auth/v1/token/ due to access control checks.

我已经尝试了一堆.htaccess配置与Access-Control-Allow-OriginAccess-Control-Allow-HeadersAccess-Control-Allow-Methods的变化,我不能让Safari通过OPTIONS请求。

该应用程序是一个Vue.js前端,使用Axios制作XHR,在REST API上调用了一个WordPress javascript web token(jwt)端点。任何帮助将不胜感激。如果有Auth流程的替代方案,我愿意接受建议。使用WordPress因为它易于安装而且我多年来一直是WP开发人员。

谢谢!

更新 :

这是我当前的.htaccess文件。我尝试了很多不同的东西。

<IfModule mod_rewrite.c>
    RewriteEngine on
    Header always set Access-Control-Allow-Origin "http://{LOCAL_DEV_URL}"
    Header always set Access-Control-Allow-Headers "origin, x-requested-with, content-type"
    Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
答案

应使用204 No Content HTTP代码(以及标题)确认预检请求。

尝试在.htaccess指令下面的Header中添加以下内容:

RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=204,L]

以上是关于Safari不会在Apache上的Vue.js应用程序中加载预检CORS身份验证请求(XHR)的主要内容,如果未能解决你的问题,请参考以下文章

如何在tomcat上部署Vue.js应用程序?

使用 Phonegap 在 iPad 上的 safari 中打开外部 url

Vue.js Import mixin 不会在应用程序中导入

Cordova 3.1 在 iOS6 上的 Safari 中打开链接

移动 safari (iOS) 中的 javascript 不会下载日历邀请

ipad上的背景音频不会停止