1、JSONPJsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。 为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。 同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。 PHP服务器端Demo:
前端HTML页面Demo:
2、CORS当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请求(cross-origin HTTP request)。比如,站点 http://domain-a.com 的某 HTML 页面通过 出于安全考虑,浏览器会限制脚本中发起的跨域请求。比如,使用 XMLHttpRequest和 Fetch 发起的 HTTP 请求必须遵循同源策略。因此,Web 应用通过 XMLHttpRequest 对象或 Fetch 仅能向同域资源发起 HTTP 请求。 为提升 Web 应用的可用性,浏览器必须支持跨域请求。
跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。 跨域资源共享标准( cross-origin sharing standard )允许在下列场景中使用跨域 HTTP 请求:
HTML Demo页面代码: CORS策略的关键是,后端返回的 Access-Control-Allow-Origin,其中Access-Control-Allow-Origin为*时,代表针对任何来源的请求都支付跨域,在实际工作中,Access-Control-Allow-Origin的值往往为 主域下的某些子域,如 test.baidu.com等。 3、 document.domain对于主域相同而子域不同的情况下,可以通过设置 document.domain 的办法来解决。 具体做法是可以在 http://www.abc.com/a.html 和 http://test.abc.com/b.html 两个文件分别加上 document.domain = "abc.com";然后通过 a.html 文件创建一个 iframe,去控制 iframe 的 window,从而进行交互,当然这种方法只能解决主域相同而二级域名不同的情况。 4、postMessagepostMessage 是 HTML5 新增加的一项功能,跨文档消息传输(Cross Document Messaging),目前:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 都支持这项功能,使用起来也特别简单。 A页面Demo:
B页面Demo:
5、 location.hashlocation是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash="#admin"。利用这个属性值可以做一个非常有意义的事情。 A页面Demo代码: B页面Demo代码: 由于两个页面不在同一个域下,IE、Chrome不允许修改parent.location.hash的值,所以要借助于 localhost:8080 域名下的一个代理 iframe 的 C.html 页面 当然这种方法存在着诸多的缺点:
|
| 本文出处: http://www.toutiao.com/a6409403563676303618/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|