HTTPS上的jQuery AJAX - 资源无法加载

时间:2012-03-14 20:22:20

标签: jquery ajax ssl https cors

我在http(s)://www.api.domain.com拥有自己的API(在HTTPS上安装了RapidSSL)。

如果我通过浏览器访问该网址

{"error":{"code":404,"message":"Invalid API version."}}

这很好。

如果我访问https://www.api.domain.com/v1/auth,我会

{"error":{"code":404,"message":"Missing authorization header."}}

也没关系(表示API在SSL上运行正常)。

我从其他域调用该API的jQuery AJAX。如果我在没有SSL的情况下拨打电话(http://www.api.domain.com/v1/auth),一切正常(我正在发送授权标题和所有其他必要的东西),我正在收到回复。如果我尝试使用SSL(https://www.api.domain.com/v1/auth)访问同一内容,我会获得OPTIONS https://www.api.domain.com/v1/auth Resource failed to load

此外, CORS 正在运作。在PHP方面我有

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: Authorization, x-domain-accesskey, X-Requested-With');
    exit;
}

所以它有效,但只有没有SSL。在Chrome中我看到一个 OPTIONS 请求,然后是 GET / POST /无论我要求的。它运作得很好。

但是当我尝试继续使用HTTPS时,

  

资源无法加载

在网络标签上我只有这个(不知道为什么第一张图片显示 OPTIONS ,但详细信息 POST

enter image description here

enter image description here

enter image description here

然后......停止?在jQuery中,它在线停止

xhr.send( ( s.hasContent && s.data ) || null );

$.ajax是正常的(没有crossDomain: truedataType: jsonp或其他内容。

想法?

2 个答案:

答案 0 :(得分:3)

让您通过https从渲染中发送https ajax请求的页面,它应该可以正常工作。

答案 1 :(得分:0)

我在chrome控制台中有一个与停止行相似的错误,还有很多404(找不到admin-ajax.php)和在wordpress admin中有大约500个错误。

g.send(b.hasContent && b.data || null)

阅读@Rooster的解决方案使我想到了我的https SSL证书站点的htaccess,该站点仍然是默认的wordpress文件。通过在其上方添加以下内容:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

“代码强制http://example.com加载https://example.com的请求。它也强制直接链接的资源(图像,css等)使用https”

请参阅:-https://help.dreamhost.com/hc/en-us/articles/215747758-Force-your-site-to-load-securely-with-an-htaccess-file

最后,您的文件应如下所示:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

希望如此,可以解决我的一些错误。