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

joomla BASE HREF 使用 HTTP 而不是 HTTPS

HTTPS而不是HTTP?