我在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 )
然后......停止?在jQuery中,它在线停止
xhr.send( ( s.hasContent && s.data ) || null );
$.ajax
是正常的(没有crossDomain: true
,dataType: jsonp
或其他内容。
想法?
答案 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”
最后,您的文件应如下所示:
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
希望如此,可以解决我的一些错误。