如何使用jQuery显式发出AJAX HTTPS GET请求?我正在尝试执行以下操作。
在https页面上,我有一行代码$.get("/resource")
,但我收到以下错误
XMLHttpRequest cannot load http://www.site.com/resource. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.site.com' is therefore not allowed access.
如果相对资源来自https页面,为什么AJAX调用尝试使用HTTP协议访问页面?如果$ .get(url)方法默认执行此操作,如何使用jQuery执行显式HTTPS GET请求?另一个在http://forum.jquery.com/topic/jquery-get-ajax-call-on-http-page-to-https-on-same-domain遇到类似问题的人无法解决问题。
jQuery版本是1.7.2
答案 0 :(得分:43)
我解决了这个问题。事实证明,由于我们的Django站点的配置方式,我需要在AJAX请求中向资源添加一个尾部斜杠。如果没有斜杠,Django将使用HTTP请求而不是HTTPS请求重定向到带有斜杠的URL。
简而言之,我将$.get("/resource")
替换为$.get("/resource/")
。
谢谢。我非常感谢你的帮助。
答案 1 :(得分:9)
如果您所在的页面是https页面,并且页面.get尝试访问的页面是http,那么由于相同的来源,该页面将无效。但是,你可以写出ajax,而不是用.get :)来简单地处理它。
$.ajax({
type: "GET",
url: "https://someurl"
});
虽然我认为公平,但仍然缺少真正的javascript
答案 2 :(得分:2)
尝试将数据类型设置为“jsonp”,这有助于我过去使用跨源请求。
$.ajax({
url: "//www.site.com/resource"
dataType: "jsonp",
success: function(data) {
$(".demo-card").html(data);
}
});
答案 3 :(得分:0)
只需在.htaccess文件中使用指定协议的RewriteRule,例如:
RewriteCond %{REQUEST_URI} .+[^/]$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]