JavaScript 跨域(CORS)

跨域是浏览器安全策略的一种体现,CORS(跨域资源共享)为合理实现跨域请求提供了标准。CORS通过自定义HTTP头部实现浏览器与服务器间的沟通,决定请求是否允许。简单请求只需Origin头部,复杂请求可能需要预检请求。IE采用XDR,其他浏览器通过XMLHttpRequest支持CORS。带凭证的请求需设置withCredentials为true,并在服务器响应中返回Access-Control-Allow-Credentials: true。JSONP是另一种跨域解决方案,通过动态插入script标签,利用回调函数传递JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、概念

通过XHR实现Ajax通信的一个主要限制,来源于跨域安全策略。默认情况与下,XHR 对象只能访问同一域中的资源。这种安全策略可以预防某些恶意行为。

但是,实现合理的跨域请求在现代web应用中还是很有必要的。

CORS (Cross-Origin Resource Sharing,跨域资源请求)是W3C 的一个工作草案,定义了在必须访问跨域资源时,浏览器与服务器应该如何沟通。

CORS 的基本思想,就是使用自定义的HTTP 头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是失败。

比如一个简单的使用GET 或 POST 发送的请求,他没有自定义的头部,而主题内容是 text/plain。在请求发送请求时,需要给他附加一个额外的Origin头部,

其中包含请求页面的源信息,以便服务器根据这个头部信息来决定是否给予响应。

eg:

客户端(浏览器):Origin:http://www.baidu.com

服务器:Access-Control-Allow-Origin :http://www.baidu.com


2、CORS 的浏览器表现

(1)IE:IE8引入了一个XDR对象(XMLDomainRequest),来实现跨域。所有的XDR请求都是异步执行的,不能用它来创建同步请求。

(2)普通浏览器:WebKit 通过XMLHttpRequest 对象实现了对 CORS 的原生支持。

请求本地资源时,URL 使用相对路径。

请求跨域资源时,URL 使用决定路径。

(3)跨域请求的对象,都不能发送和接收Cookie


3、带凭证的请求

默认情况下,跨域请求不提供依据。通过将 withCredential 属性设置为 true,可以指定某个请求应该发送凭据。

如果服务器接收带凭据的请求,会用下面的 HTTP 头部响应。

Access-Control-Allow-Credentials:true。


4、JSONP

JSONP 是 JSON with padding 的简写,由两部分组成:回调函数和数据。

回调函数是当响应到来时应该再页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的JSON数据。

如:

http://www.baidu.com/json?callback=handleResponse

这个URL是在请求一个JSONP地理定位服务。通过查询字符串来指定JSONP服务的回调参数是很常见的,这里指定的回调函数的名字是 handleResponse()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值