AJAX 使用 HTTP 而不是 HTTPS
Posted
技术标签:
【中文标题】AJAX 使用 HTTP 而不是 HTTPS【英文标题】:AJAX using HTTP instead of HTTPS 【发布时间】:2015-08-23 07:45:21 【问题描述】:我的 AJAX 请求正在使用 HTTP,即使该请求来自使用 HTTPS 的页面。知道为什么要降级到 HTTP 吗?
这是我的 AJAX 请求:
$(function()
// Update section options whne course is changed
$('#id_new_course').change(function()
// Get selected coursenum
var val = $(this).val();
var sect_input = $('#id_section');
// Disable #id_section when no course is selected
if (val == '')
sect_input.empty();
sect_input.prop('disabled', true);
else
// Get list of sections for selected course and update #id_section options
$.ajax(
url: '/account/support_dashboard.get_course_sections/' + val + '/',
dataType: 'json',
success: function(data)
// Empty options and add new ones to #id_section
sect_input.empty();
$.each(data, function(value, key)
sect_input.append($('<option></option>').attr('value', value).text(key));
);
sect_input.prop('disabled', false);
,
error: function()
console.log('ERROR OCCURRED TRY AGAIN');
);//ajax
//if
);
); //ready
这是我的 Web 控制台中的错误输出:
Mixed Content: The page at 'https://www.myeducator.com/account/support_dashboard/1027/993532704604577793/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.myeducator.com/account/support_dashboard.get_course_sections/915ba/'. This request has been blocked; the content must be served over HTTPS.
正在通过 HTTPS 加载 javascript 文件:
另外,实际的 ajax 请求是以 HTTPS 的形式发出的:
我也不认为这与我的网络服务器 (nginx) 有任何关系。我只有一个重写命令,可以使用相同的请求方案将任何未处理的子域重定向到 www.myeductor.com:
server
listen 443 default_server ssl;
server_name _;
...
# the rewrite string
rewrite ^ $scheme://www.myeducator.com$request_uri redirect;
【问题讨论】:
那么.js文件是从https加载的吗? 当您在控制台中查看 http 请求时。你看到它在进行 https 调用了吗? 有趣的问题。我想知道为什么当您将域相对 URL 传递给 jQuery 时,它没有从源页面获取 https?作为一种解决方法,我想您可以从window.location
获取协议、端口和域并将其添加到您的 URL。
如果这确实是正在运行的代码,那么这一定是由以下任一原因引起的(1)服务器显式降级(即,客户端确实请求 HTTPS,但服务器响应重定向到 HTTP) 或者 (2) 在你的代码的其他地方有某种 jQuery.ajaxPrefilter
修改。
@adeneo 见我上面的编辑。它通过 HTTPS 提供服务
【参考方案1】:
我也遇到过类似的问题,很不解……
Mixed Content: The page at 'https://domain.com/blah.json' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://domain.com'. This request has been blocked; the content must be served over HTTPS.
原来 .json 没有在 IIS 的 MIME 类型中设置。添加 .json 扩展名后,一切正常。
编辑:我怀疑你的端点“dashboard.get_course_sections”有一个点,这让你的服务器认为它是一种不支持的资源。
【讨论】:
OP 使用的是 nginx,而不是 IIS。 更新后更清楚地说明了我对这两个问题之间关系的看法。 请原谅迟到的回复。我们使用的框架是 Django 的修改版本,称为 Django-Mako-Plus。长话短说,但 url 的点语法没有指定 mime 类型,而是指定要调用的特定视图函数。所以它不是网址内的点。以上是关于AJAX 使用 HTTP 而不是 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章
使用 Nginx 1.10 和 HTTP/2 的 Firefox 中的第一个 Ajax 请求失败
AFNetworking 使用 HTTPS 而不是 HTTP
Team Foundation Server可以使用https而不是http吗?
为啥我的 web api 在 C# 中使用 https 而不是 http