当某个互联网运营商的网站上规模之后,他们都会考虑将网站部署到主域名相同,子域名不同的服务器集群上,以此来构建一个聚合的应用。
同时,希望能够利用 JavaScript,在不同子域的网页间相互操作,实现一个对用户来说“无缝”的应用。这时,跨域操作的技术难点,仿佛一下子从服务器后台,转移到了浏览器前台。因为,浏览器将承载跨子域访问的任务。为什么会这么说呢?因为,我们已经步入了集成化的 RIA 时代。
一般情况下,通过运用 DOM 对象模型,不同窗口和框架里的内容可以通过JavaScript 互相作用。
但是,由于浏览器可以同时在窗口或框架中显示不同的页面,甚至是不同域下的页面。为了保证数据的完整性和信息的安全性,就必须建立起一种强制规则,来保证跨域的数据不会被非法的获取和修改。
多数情况下,只有相同域下的页面才能相互作用。比如,一个位于
www.microsoft.com域下的页面,可以自由地通过 JavaScript 读写
www.microsoft.com域下的其它页面,但却不能读写 home.microsoft.com 域下的页面,或是
www.google.com域下的页面。完全的跨域访问(比如,
www.microsoft.com域下的页面访问
www.google.com域下的页面),在 JavaScript 开发中是被完全禁止的,没有任何商量的余地。但是,DOM 为 document 对象提供了一个 domain 属性,可以授权“同主域但不同子域”页面间的数据访问,这正好可以应付那些“集团军”式的前台部署。
跨子域设置的规则:当两个二级域名,URL 协议,端口都相同的网页,自身都通过 JavaScript 显示地设置了相同的 document.domain 值,并且此值至少等于自身的二级域名,它们之间才可以相互作用。(注意,此规则只适用大于二级域名的页面,并且千万别指望 http 页面可以与 https 页面相互作用。)
也就是说,当网页作者指定 document.domain 属性为域名的后半部分时,读写许可将扩展至二级域名。例如:
http://www.microsoft.com下的某个页面,将 document.domain 属性设置成 microsoft.com,同时
http://home.microsoft.com下的某个页面,也将 document.domain 属性设置成 microsoft.com,它们之间即可完成跨子域的访问。因为,只有以 microsoft.com 结尾的站点上的文档,才可能将其 document.domain 属性设置为 microsoft.com,这样就确保了同一个服务提供者的页面,才能互相提供权限,从而完成交互操作。
注意,document.domain 属性值不能比二级域名更短(比如“com”,浏览器将禁止这种设置,并认为此操作是无效的)。但是,对于如www.microsoft.co.jp这样的域名,实际的最大操作权限应该是二级域名 microsoft.co.jp(而不是一级域名“co.jp”,浏览器不会像限制“com”那样,将“co.jp”认为是无效的。但如果你真这样做了,带来的风险可想而知)。
在窗口、对话框、框架(frameset,frame,iframe),甚至是 IE 的 popup 窗口之间(通过 IE 特有的 window.createPopup 方法创建),只要它们涉及到了相互读写,都要考虑 document.domain 问题。这仿佛是“一损俱损,一荣俱荣”的事情,一旦你在某个地方设置了 document.domain,你必须小心应对。因为,你不知道在哪个角落里,会出现“没有权限”的脚本错误。
让窗口或框架在不同域页面之间跳转,是件很寻常的事情,所以跳转操作总是被允许的。只有试图读写
(注意此处是读和写)页面内容时,才会受到 domain 限制。例如:window.location 可以用来设置地址间的跳转,但是不能用它来读取在不同域下的地址。因为,这会使一个页面知道浏览者去过哪些地方,而这会暴露浏览者的隐私。
在不同域间的页面制约包括
引用
window.location 可以设置,但不能读取。其它的 location 属性和方法被禁止访问;
document.href 可以设置,但不能读取。其它的 document 属性和方法被禁止访问;
<iframe> 的 src 可以设置,但不能读取;
浏览器为什么要加入跨域限制?
浏览器的跨域网页限制,是出于安全角度考虑的,为什么会这么说呢?请想像一下,如果没有域之间的安全限制,一个无赖网页可以“偷窥”别人浏览的页面,然后通过 Ajax 方式,将“偷窥”后的数据发送到某台不为人知的服务器上,它便实现了无耻的侵略行为。
再或者,这个无赖网页可以通过 DHTML 来更改别人页面的内容。比如:编写一个监视脚本,把用户已经打开的所有页面改换背景色,版权文字,以及放入一些自制的 banner,这样就可以把别人的整个站点变成“自己的”了。
分享到:
相关推荐
App权限判断和提示
"js控制js控制权限控制js控制js控制权限控制"这个标题和描述似乎在强调JavaScript在处理权限和控制方面的功能。我们将深入探讨JavaScript在权限控制中的应用及其重要性。 1. **JavaScript的基本概念**: ...
本文旨在解决 SharePoint 权限问题,通过 ECMAScript 客户端 JavaScript 代码获得服务器端用户账号,从而实现自定义权限控制页面访问权限。 在 SharePoint 中,权限控制是通过用户和组的方式实现的。用户可以属于多...
**标题详解:** "用于myeclipse中js提示的spket插件" "myeclipse" 是一个集成开发环境(IDE),是IBM推出的基于Eclipse的Java、Web和企业应用程序开发工具。它扩展了Eclipse的功能,特别是对于Java EE开发者来说,...
JavaScript提示框特效是一种常见的网页交互元素,用于向用户显示信息、警告或确认操作。在网页开发中,我们经常需要自定义这些提示框以提供更好的用户体验。传统的JavaScript提示框包括`alert()`, `prompt()`, 和 `...
App权限判断和提示,插件市场的代码
在JavaScript和CSS技术的支持下,我们可以创建一个具有圆角的提示框,这通常被称为"tooltip"。这个提示框不仅能够显示必要的信息,还能通过自定义样式来增强用户体验。以下是对这个话题的详细解释: 首先,我们需要...
**maptree:多级用户权限树JS插件详解** `maptree` 是一款专为JavaScript开发者设计的插件,主要用于构建具有多级用户权限的树形结构。在Web应用程序中,尤其是在权限管理复杂的系统中,这样的插件尤其有用,因为它...
在这个“非常漂亮的JS提示框”主题中,我们主要探讨的是如何利用JS实现一个既美观又实用的提示框,并解决在不同浏览器中,特别是IE6中的兼容性问题。 提示框是用户界面中常见的一种元素,通常用于显示警告、确认...
总的来说,这个主题涵盖了使用VSCode进行JavaScript开发,特别是针对auto.js的定制化开发环境的构建,以及如何在无网络条件下安装和利用代码提示插件和代码片段来优化编码体验。通过理解和应用这些知识点,开发者...
本篇文章将详细探讨MyEclipse中JS(JavaScript)的自动提示功能,帮助开发者提升编码速度和准确性。 **1. JS自动提示的基本概念** JS自动提示,也称为代码补全或智能感知,是IDE为提高编程效率提供的一项功能。当...
JavaScript提示框插件是一种常用的网页交互元素,它能够在鼠标悬停在特定元素上时,以弹出的小窗口显示额外的信息。这种插件通常被称为“tooltips”,它可以帮助用户了解页面上某些元素的具体含义或详细内容,而无需...
【标题】中的“js提示框-转载+++ js 乱码+++自动提交+滚动图片加载+箭头导航(转载)”揭示了几个重要的JavaScript编程知识点,主要包括以下几个方面: 1. **JavaScript 提示框**: JavaScript 提示框是浏览器内置的...
标题中的“漂亮的js提示信息效果”指的是在网页中使用JavaScript实现的一种美观且具有交互性的提示信息展示方式。这种效果可以是通知、警告、确认对话框或者是其他形式的信息提示,为用户提供更加直观和友好的用户...
"纯JS实现鼠标划过时显示提示框"这个主题涉及到了JavaScript基础、DOM操作、事件处理以及自定义插件开发等知识点。 1. **JavaScript基础**:JavaScript是网页动态效果的核心,它是一种脚本语言,可以在浏览器端运行...
在Vue项目中,JavaScript权限管理是一项重要的功能,它涉及到用户角色、权限控制以及页面元素的显示与隐藏。本文将深入探讨Vue项目中的JS权限配置,包括DOM遍历、多级展示、交互效果以及递归操作的应用,以帮助...
Message.js 是一个专为实现这种功能而设计的原生JavaScript插件。这个插件允许开发者轻松地在网页上添加各种样式和动画效果的消息提示,无需依赖其他大型库如jQuery,从而提高页面加载速度并降低资源消耗。 Message...
如果需要添加新的功能,程序员只需维护权限表并设计一个权限系统即可。该系统支持动态配置权限和角色之间的关联信息,以及用户和角色之间的关系。只需在数据库中配置权限信息,系统就可以动态地读取角色和权限信息,...
jsTree 权限操作 通过菜单加载权限。网上收集了1个星期,才整理出来的 通过ajax调取后台。后台数据表中的.id,parentId, text 三个必备参数。id,parentid 管理后,会自动生成树。使用了abp框架 可以提取你想要的部分
详细介绍了js的权限机制 很值得一看 大家可以看看 有问题联系我啊