Ajax 同一域策略是如何强制执行的?
假设我有一个域,Ajax 同一域策略是如何强制执行的?,ajax,subdomain,xss,Ajax,Subdomain,Xss,假设我有一个域,js.mydomain.com,它指向某个IP地址,另一个域,requests.mydomain.com,它指向另一个IP地址。从js.mydomain.com下载的.js文件能否向requests.mydomain.com发出Ajax请求 现代浏览器究竟是如何实施相同的域策略的?这不会起作用,因为主机名不同。如果两个页面具有相同的主机、协议和端口,则认为它们来自同一来源 从维基百科: 术语“来源”是使用 域名,应用层 协议,以及(在大多数浏览器中)TCP 运行 剧本考虑了两种资
js.mydomain.com
,它指向某个IP地址,另一个域,requests.mydomain.com
,它指向另一个IP地址。从js.mydomain.com
下载的.js
文件能否向requests.mydomain.com
发出Ajax请求
现代浏览器究竟是如何实施相同的域策略的?这不会起作用,因为主机名不同。如果两个页面具有相同的主机、协议和端口,则认为它们来自同一来源 从维基百科: 术语“来源”是使用 域名,应用层 协议,以及(在大多数浏览器中)TCP 运行 剧本考虑了两种资源 当且仅当为同一来源 如果所有这些值都完全相同 一样
对您的问题的简短回答是否定的:对于AJAX调用,您只能访问从中加载页面的相同主机名(和端口/方案) 有两种解决方法:一种是在
foo.example.com
中创建一个URL,作为bar.example.com
的反向代理。只要主机名匹配,浏览器就不关心请求实际在哪里完成。如果您已经有了一个前端Apache Web服务器,这不会太困难
另一种方法是,将脚本标记插入到文档中。我相信这就是谷歌API的工作原理
您可以在这里找到关于同一原产地政策的详细说明:谢谢!这帮了大忙——AJAST看起来是个不错的选择。FWIW,IE通常不关心端口。还值得一提的是,IP地址根本不重要(在任何浏览器中)——只有protcol/scheme、主机和(在某些情况下)端口决定了来源。这意味着来自同一IP的两个不同来源可能无法通信,而负载平衡器跨多个IP提供服务的同一来源可能无法通信。