JQuery AJAX на HTTPS - не удалось загрузить ресурс - PullRequest
3 голосов
/ 15 марта 2012

У меня есть собственный API на http(s)://www.api.domain.com (на HTTPS установлен RapidSSL).

Если я получу доступ к этому URL через браузер, я получу

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

что хорошо.

Если я получу доступ https://www.api.domain.com/v1/auth, я получу

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

что тоже нормально (признак того, что API работает нормально по SSL).

У меня есть вызов jQuery AJAX для этого API из другого домена. Если я звоню без 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,

Не удалось загрузить ресурс

На вкладке Сеть у меня есть только это (не уверен, почему на первом изображении отображается ОПЦИИ , но на деталях POST )

enter image description here

enter image description here

enter image description here

а потом просто ... останавливается? В jQuery он останавливается на линии

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

$.ajax нормально (не иметь crossDomain: true, dataType: jsonp или что-то еще).

Идеи

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

делает страницу, с которой вы отправляете запрос https ajax, из render в https, и она должна нормально работать для вас.

0 голосов
/ 07 марта 2019

У меня была очень похожая ошибка в консоли chrome на строку, где она остановилась, а также много 404 (admin-ajax.php не найден) и около 500 ошибок в WordPress Admin.

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

Чтение решения @ Rooster заставило меня задуматься о htaccess для моего сайта SSL-сертификата https, который до сих пор был файлом 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

Надеюсь, что поможет, решил некоторые измои ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...