我的 AJAX 请求对象无法正确解析 URL 的协议部分
My AJAX request object doesn't properly resolve the protocol portion of the URL
>我正在尝试从安全页面发送 AJAX 请求,但 XMLHttpRequest 对象无法正确解析 URL 的协议部分。此行为在 Safari、Chrome 和 Canary 中是相同的。
这是我的JavaScript:
function sendGETRequest(url, params, callback) {
"use strict";
var req = new XMLHttpRequest();
req.onreadystatechange = function () {
if (req.readyState === 4) {
if (req.status !== 200) {
callback({ajaxError: true, status: req.status});
} else {
callback(req);
}
}
};
req.open("GET", url + "?" + params, true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req.send();
}
以下是传递给sendGETRequest()的一些不同URL,以及它们的结果:
url = "ajax/";
GET https://mydomain/mypage/ajax/?params 404 (NOT FOUND)
以上是预期的行为:在协议完好无损的情况下正确解析相对 url。
url = "/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
在这里,真实网址被正确地附加到域根,但协议错误。
url = "https://mydomain/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
在这里,协议只是被忽略。
需要明确的是,我并不是要围绕同源政策工作;我想将 AJAX 请求从安全页面发送到具有相同(安全)源的资源。我怎样才能完成这个简单的任务?
一个关于这个话题的对话:http://bytes.com/topic/javascript/answers/459071-ajax-https
最后一篇文章说:"只是为了绝对明确;XML HTTP 请求通过 https 工作就像他们通过HTTP所做的那样。如果他们不这样做,我们的质量保证部门会现在已经说了一些话,因为他们几乎完全通过HTTPS进行测试"
也许服务器在发出请求时未使用 Https (ssl):mydomain/ajax/
.
这与HTTP和HTTPS无关。 正如您在评论中提到的,由于同源策略,该请求永远不会发送。 如果请求从未发送,请求怎么会使用错误的策略? 让您感到困惑的是,生成错误消息的任何程序/附加组件/工具/等都显示"HTTP"而不是"HTTPS"。 设置 HTTPS 时,请求是并且始终遵循 HTTPS。
您的真正问题很简单,您违反了跨源策略。看到这个:https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file:_URIs
您不能向上进入目录树,只能向下。 在第一个示例中,您正在请求子文件夹。没关系。 在第二个和第三个示例中,您正在从父目录请求页面(即,而不是https://mydomain/mypage/ajax/
您请求https://mydomain/ajax/
。 您不能像这样向目录树发出请求。
要么将索引页向上移动到域的根目录,要么更改在文件上发送的同源策略标头,或者使服务器上的子目录处理请求(您可以使用类似 PHP 的 include 来仅包含父文件)。
这是 WebKit 中的一个错误。它已在Safari 5中修复了Lion而不是Snow Leopard,并且在Chrome中修复了它,但不是Canary,...嘎��
- 我的 AJAX 请求对象无法正确解析 URL 的协议部分
- Chrome扩展:不安全的JavaScript尝试访问具有URL的框架域、协议和端口必须匹配
- JavaScript:我可以得到完整的url,包括域名、文件名和协议吗
- 正则表达式,用于匹配字符串开头的协议相对 URL
- 自定义 URL 协议可以调用 JavaScript 函数吗?
- 在没有协议的情况下编写的 URL 的规则是什么
- 使用本机输入类型=“date” 的 jQuery UI 的协议相对 URL 方法
- 如何在Node.js中注册url协议处理程序
- 从URL中删除协议、域名、域和文件扩展名
- 从URL中拆分协议名称
- 在我的矢量层协议中动态更改了url,刷新后不考虑
- 在jQuery中获取跨域和协议的iFrame的URL
- 为什么是"javascript:"粘贴时从URL栏中剥离的伪协议
- Javascript regex解析url没有协议
- 如果存在顶级域名,则验证没有协议或www的url字符串
- 在src URL中没有协议的脚本会出什么问题?
- 从 URL 获取协议、域和端口
- 本地调试包含协议相对url的网页的提示
- 如何从Javascript启动两个或多个自定义URL协议
- 有MS Word的应用程序URL协议吗