跨域在js中会经常遇见,本篇将会对其进行相关的讲解。
同源策略是个很好的安全机制,但是有时候我们需要从不同的域下获取数据或者进行交互,这个时候同源策略会造成阻碍。
跨域,就是为了实现不同源下数据信息传输和交互。
实现跨域有下面几种方式:
1.JSONP
JSONP是JSON with padding(参数式JSON)的简写,是JSON的一种新应用方式。
JSONP的实现,依靠动态的
返回的JSONP由两部分组成:回调函数和JSON数据
handleResponse(JSON)
由于通过
Oring:http://www.baidu.com //说明这一个请求是http://www.baidu.com发出的
如果服务器认为这个请求可以接受,就在Access-Control-Allow-Origin头部中返回相同的源信息(假设为公共资源,则可以返回“*”)
Access-Control-Allow-Origin:http://www.baidu.com
如果没有这个头部,或者头部的源信息不匹配,浏览器就会拦截掉返回的响应。
除了简单请求外,都是复杂请求
复杂请求与简单请求类似,只是在发送正式请求之前,会先发送一个预检请求,确认当前域是否在服务器许可范围中,服务器可以接受什么HTTP头信息、请求方式、数据类型等。得到许可回复以后,才会开始正式通信。
下面是预检请求头和响应头
//这是一个预检请求头OPTIONS /cors HTTP/1.1 //注意请求返回为options;Origin: https://api.qiutc.me //请求来源;Access-Control-Request-Method: PUT // 请求的方式Access-Control-Request-Headers: X-Custom-Header //请求头额外信息;Host: api.qiutc.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...
//这是一个预检响应头HTTP/1.1 200 OKDate: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: https://api.qiutc.meAccess-Control-Allow-Methods: GET, POST, PUT //表明服务器支持的所有跨域方法Access-Control-Allow-Headers: X-Custom-Header //表明服务器支持的额外请求头Content-Type: text/html; charset=utf-8Content-Encoding: gzip
Content-Length: 0Keep-Alive: timeout=2, max=100Connection: Keep-Alive
Content-Type: text/plain
本篇详解了跨域的相关问题,更多相关内容请关注php中文网。
相关推荐:










