Ajax在http页面上使用https

use*_*863 98 ajax https jquery cors

我的网站使用http和https协议; 它不会影响内容.我的网站使用jQuery ajax调用,它也会填充页面上的某些区域.

现在,我想通过https进行所有ajax调用.(请不要问我为什么:))当我在使用https协议的页面上时,ajax请求正在运行.当我在一个带有http协议的页面上时,我收到一个javascript错误:访问受限制的URI被拒绝

我知道这是一个跨域问题(事实上,它是一个交叉协议问题),我知道我应该在ajax调用中使用与当前页面相同的协议.

不过,我希望所有ajax调用都是https,并在通过http提供的页面上调用它们.有没有解决方法来实现这个(一些json /代理解决方案?),还是根本不可能?

Dal*_*oft 57

从服务器添加Access-Control-Allow-Origin标头

Access-Control-Allow-Origin: https://www.mysite.com
Run Code Online (Sandbox Code Playgroud)

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

  • 很棒的回复 - 但不支持一些使用过的浏览器,如Opera(根本没有)和Internet Explorer(从版本8开始支持)http://caniuse.com/#search=cors (7认同)

Jav*_*ier 11

试试JSONP.

大多数JS库使其像其他AJAX调用一样简单,但在内部使用iframe进行查询.

如果您没有为您的有效负载使用JSON,那么您将必须围绕iframe推出自己的机制.

就个人而言,我只是将http://页面重定向到https:// one


cee*_*yoz 8

http://example.com/可能会解析为与https://example.com/不同的VirtualHost (由于未发送主机标头,因此会响应该IP的默认值),因此这两者被视为单独的域,因此受到跨域JS限制.

JSON回调可以让你避免这种情况.


Qui*_*son 2

您可以尝试在 iframe 中加载 https 页面,并通过某个桥将所有 ajax 请求路由进/出框架,这是一种 hackaround,但它可能会起作用(不确定它是否会在给定安全上下文的情况下施加相同的访问限制) 。否则,用于重新路由请求(如任何跨域调用)的本地 http 代理将是可接受的解决方案。

  • 读完这篇文章后,我会坚持使用 JSONP http://www.dslreports.com/forum/r21425467-IFrame-With-HTTPS-on-HTTP-Page (2认同)