文档章节

同源策越解决方案

Leech
 Leech
发布于 2015/08/22 19:14
字数 787
阅读 208
收藏 14

在一次工作中,遇到了需要跨域访问的需求,于是研究了这方面的技术。先来介绍下我的应用场景,我们有一台服务器A在www.A.com,另一台服务器B在www.B.com,如果请求A的页面后,在该页面写一段JS使用AJAX访问B服务器,浏览器会拒绝这次请求。这是现代浏览器遵循的同源策略。

1    同源策略

同源策略由Netscape提出,又名同域策略是浏览器中的主要安全措施。这里的“源”指的是主机名、协议和端口号的组合;我们可以把一个“源”看作是某个web页面或浏览器所浏览的信息的创建者。同源策略,简单地说就是要求动态内容(例如,JavaScript或者VBScript)只能阅读与之同源的那些HTTP应答和cookies,而不能阅读来自不同源的内容。更为有趣的是,同源策略对写操作没有任何限制。因而,一个web站点可以向任何其他的Web站点发送(或写入)HTTP请求,尽管为了防止跨站请求可能会对发送这些请求有关的cookies和头部有所限制。

2    能访问异域的标签

通过日常的开发经验,我们可以得知。类似于<a>、<iframe>、<script>等带有src的标签,都可以跨域访问。那我们能不能通过加载一个js来获取异域服务器的信息呢?

如是,我就在B服务器上写了一段js,如下所示:

alert("你好,我是B服务器!");

然后使用<script>在A的HTML中引用B的JS文件。显然,我访问A服务器的HTML后得到了我想要的结果,浏览器弹出了"你好,我是B服务器!"的对话框。如是,我开始思考,这段JS能不能动态生成,并且能够携带B服务器查询的数据回客户端,然后触发A页面中的回调函数呢?

如是,我将<script>标签的src属性指向了我的Servlet(Java Web开发组件),Servlet执行服务器操作后返回一段JS给客户端,代码如下:

// 调用业务组件执行业务,然后返回执行成功的数据,这里只简单的返回一个JSON对象

response.write("callback({\"success\":true})")

这段JS很明显,会给客户端返回一个回调函数callback并传入了一个JSON对象。客户端页面可以定义该callback函数,就可以执行回调操作。此时就可以完美解决浏览器的同源策略问题。

3    其它前端框架同源策略的解决方案

因为此类需求频繁出现,业界也提出了一个新的名词JSONP(JSON with Padding,P是填充的意思)。JSONP是JSON的一种使用形式。

著名的前端框架jQuery已经支持了JSONP的跨域解决方案。跨域参考jQuery的文档。原理大致相同,此处不再累述。

© 著作权归作者所有

下一篇: Commons FileUpload
Leech
粉丝 21
博文 270
码字总数 589803
作品 0
武汉
架构师
私信 提问
加载中

评论(2)

Leech
Leech 博主

引用来自“湖心亭看雪”的评论

。。5竟然没看懂
哪里不理解,不知道是否可以帮助你?
湖心亭看雪
湖心亭看雪
。。5竟然没看懂
神策数据获4400万美元C轮融资 自爆性能指标

  【IT168 资讯】4 月 11 日,神策数据在京宣布,完成4400万美元C轮融资。本轮融资由华平投资领投,红杉资本中国基金、DCM资本、襄禾资本、晨兴资本、线性资本、明势资本跟投。   华平投...

it168网站
2018/04/12
0
0
ajax跨域问题我只学一种解决方案

Ajax跨域问题的jsonp解决方案 在前端我们经常会使用Ajax来向服务器发送请求和接收服务器响应回来的数据,一般来说在同一个服务器的数据来往是没有什么问题的,但是有时使用Ajax请求数据并不局限...

JH30K
10/05
0
0
浏览器同源策略及 Ajax 跨域解决方案

因为在开发过程中会经常遇到因为浏览器同源策略而导致的跨域问题,而多数开发者对浏览器同源策略和跨域问题并没有很清晰的认识,所以打算在这篇文章中说下浏览器同源策略和我们最经常会遇到的...

淘淘笙悦
2018/07/13
0
0
海勃物流软件与Ebistrategy亦策软件达成合作

去年,国家发改委下发关于加快实施现代物流重大工程的通知,内容中提到"提升物流业信息化、标准化水平。加强大数据、物联网、云计算等先进信息技术在重大物流工程中的应用,推动物流信息和公...

玄学酱
2018/05/22
0
0
CSRF/XSRF 跨站请求伪造

CSRF(Cross Site Request Forgery, 跨站域请求伪造)也称 XSRF, 是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击...

给你添麻烦了
2018/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部