【发布时间】:2012-03-30 23:39:13
【问题描述】:
每当我创建 jQuery.ajax 请求时,当 URL 使用 HTTP 协议时它工作正常。但是当我向 HTTPS 服务器发送相同的请求时,它会在没有标头 [HTTP_X_REQUESTED_WITH: XMLHttpRequest] 的情况下发送。因此服务器无法知道这是一个 AJAX 请求!
我试过了:
- 切换 $.ajax、$.post、$.get
- 使用
beforeSend强制标头 - 设置
CrossDomain:true
注意:不存在跨域问题,请求有效并被处理,但不是AJAX。
当当前 URL 为 http 但请求的 URL 位于同一域但使用 HTTPS 时,会发生此问题。 http://example.com/home 将使用 AJAX POST 发布到
【问题讨论】:
-
这是一个跨域问题 AFAIK。 SOP 要求请求使用相同的协议和端口(当您使用 HTTP -> HTTPS 和 80 -> 443 时)。看起来(没有更多信息)jQuery 正在在幕后发出 JSONP 请求,它忽略了额外的 HTTP 标头。
-
您的意思是当您在 HTTP 服务器上并向 HTTPS 服务器发出 ajax 请求时,对吧?
-
您确定要寻找正确的标题吗?你在哪个jquery版本上?每次我不得不这样做时,jquery 都会设置 x-requested-with 标头,而不是 HTTP_X_REQUESTED_WITH 标头。
-
两者都没有设置!我在 jQuery v1.7.1
-
@mjalajel 不,在这种情况下,它不会回退到
jsonp,但是它将使用<script>标签作为GET请求发送。使用<script>标签发出请求时,无法设置headers。
标签: javascript jquery ajax https