Я пытаюсь создать внешний API в приложении Django для предоставления некоторого контента на рабочий сайт Wordpress. Клиент работает по протоколу https, а javascript использует fetch для получения URL-адреса https api, но браузеры запрашивают смешанный контент http. Что дает?
Я пробовал и Chrome, и Firefox, и оба возвращают похожие ошибки
fetch('https://mysite.pythonanywhere.com/apit?param1=100000¶m2=1000', {
method: 'GET',
})
.then(function(response) {
if (response.status !== 200) {
console.log(response);
console.log('Looks like there was a problem. Status Code: ' +
response.status);
return;
}
});
мой взгляд на это в Django:
response = JsonResponse(the_content_dict,safe=False)
return response
Iможно перейти по URL-адресу непосредственно в браузере и просмотреть ответ json, как и ожидалось, но когда я размещаю приведенный выше код на клиентском WP-сайте, я вижу в консоли Firefox:
Blocked loading mixed active content “http://mysite.pythonanywhere.com/apit?param1=100000¶m2=1000”
TypeError: NetworkError when attempting to fetch resource. rank:154:3
Response { type: "cors", url: "https://mysite.pythonanywhere.com/apit?param1=100000¶m2=1000", redirected: false, status: 500, ok: false, statusText: "Internal Server Error", headers: Headers, body: ReadableStream, bodyUsed: false }
Looks like there was a problem. Status Code: 500
Аналогично, в Chrome:
(index):154 Mixed Content: The page at 'https://clientsite.com' was loaded over HTTPS, but requested an insecure resource 'http://mysite.pythonanywhere.com/apit?param1=100000¶m2=1000'. This request has been blocked; the content must be served over HTTPS.
(anonymous) @ (index):154
(index):1 Uncaught (in promise) TypeError: Failed to fetch
Почему браузеры пытаются загрузить не HTTPS-версию вместо https в выборке? Я использую django-cors-headers для внесения в белый список клиентского домена, который, кажется, работает.