在js中如何实现CORS(cross origin resource sharing)跨源资源共享?
在早期,有通过图像ping和JSONP来实现跨域,
(1)图像ping是利用设置img元素的特性,即一个页面中的图片可以来自其他域,可以通过js设置img的src属性来发起一个请求,并且通过onload和onerror方法可以监控是否加载成功或者失败,但缺点是浏览器不能接收到任何的数据,并且只能发起get请求。
(2)JSONP通过创建动态的script对象,通过设置script的src例如:“http://xxx.com/callback="handler"”,其中的callback是一个参数,其值handler是一个函数,用于处理从服务器返回的数据。function handler(textFromServer){console.log(textFromServer);}//其中textFromServer就是来自服务器的响应数据。
在出现CORS之后,各浏览器也都支持,只是支持的程度不一样。但简单的(即非Preflighted和不带凭据的请求)都支持。简单介绍一下Preflighted和带凭据请求:
(1)PreflightedRequest(预飞行请求,即在飞行之前(发起真正的请求之前,先发送一个options请求,确定是否可以发送))透明服务器验证机制支持开发人员使用自定义的头部。get或者post之外的方法,以及不同类型的主题内容。写了一个demo,但是在chrome中运行不通过,在firefox中可以。该类型的请求,首先会向服务器发
在早期,有通过图像ping和JSONP来实现跨域,
(1)图像ping是利用设置img元素的特性,即一个页面中的图片可以来自其他域,可以通过js设置img的src属性来发起一个请求,并且通过onload和onerror方法可以监控是否加载成功或者失败,但缺点是浏览器不能接收到任何的数据,并且只能发起get请求。
(2)JSONP通过创建动态的script对象,通过设置script的src例如:“http://xxx.com/callback="handler"”,其中的callback是一个参数,其值handler是一个函数,用于处理从服务器返回的数据。function handler(textFromServer){console.log(textFromServer);}//其中textFromServer就是来自服务器的响应数据。
在出现CORS之后,各浏览器也都支持,只是支持的程度不一样。但简单的(即非Preflighted和不带凭据的请求)都支持。简单介绍一下Preflighted和带凭据请求:
(1)PreflightedRequest(预飞行请求,即在飞行之前(发起真正的请求之前,先发送一个options请求,确定是否可以发送))透明服务器验证机制支持开发人员使用自定义的头部。get或者post之外的方法,以及不同类型的主题内容。写了一个demo,但是在chrome中运行不通过,在firefox中可以。该类型的请求,首先会向服务器发