基于HTTPS的Ajax GET请求

12

我如何通过 HTTPS 发送一个 ajax 的 GET 请求?

$.get 抛出以下错误:

XMLHttpRequest cannot load https://********. Origin null is not allowed by Access-Control-Allow-Origin. 

有没有其他方式或解决方法可以让它工作?

如果我用 Chrome 访问URL,我能够得到响应。我不明白为什么它不能在 ajax 请求中工作。


看起来像是跨域问题,而不是HTTPS问题。无论你使用了什么代码,都应该提供一些关于URL的上下文信息,以便与页面/站点的运行相关联。 - Jared Farrish
你是在使用包含你的详细信息的对象,如http://api.jquery.com/jQuery.get/中所示,还是只是单独调用$.get函数? - minikomi
2个回答

34

如果当前页面处于http,则无法向https页面发起AJAX请求,这是由于同源策略的限制。

AJAX请求只有在主机名端口号协议类型(如http或https)完全一致时才能正常工作。

为了允许此类请求,您可以确保原始页面与目标页面位于同一主机和协议上,或者在目标域上实施跨域资源共享(CORS)


0

[jQuery v. 3.3.1]

我有一个 Web 应用程序,所有资源和流量都通过 HTTPS 进行。

然而,我发现我无法发送 $.ajax() 或任何特定的 $.get$.post 等,因为(Chrome 输出):

拒绝连接到 'http://mywebapp/api/mycall',因为它违反了以下内容安全策略指令:"connect-src 'self'"。

这是由于 HTTPS 页面通过 HTTP 进行 AJAX 请求,我找不到强制使用 HTTPS 的方法。

疯狂的是,解决问题的方法。调用 $.get('/api/mycall/') 输出上述错误,其中在代码中的实际调用中省略了结尾的正斜杠。因此,从错误来看,好像没有正斜杠。

我已经进行了多次调用,每次在被调用的 URL 中有一个结束斜杠时都会失败。同样的调用如果没有结束斜杠则全部成功。

这样调用 $.ajax({ url: '/api/mycall'}) 是可以工作的,而 $.ajax({ url: '/api/mycall/'}) 则不行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接