同源策略和跨域
什么是浏览器的同源策略?
ajax请求时,浏览器要求当前网页(以及请求的资源)和server必须同缘以保证安全,即ajax只能访问自己的资源
同源: ajax请求的url的 协议,域名,端口必须一致
对于一段JavaScript脚本来说,其“源”与它存储的地址无关,而取决于脚本被加载的页面。比如我们在某个页面中通过。
<script>标签引用了来源于不同地方(“http://www.artech.com/”和“http://www.jinnan.me/”)的两个JavaScript脚本,它们均与当前页面同源。
可以跨域的地址:
图片的地址:直接跨域,可以利用img统计打点,在src的地址页面中写上各种需要的参数;
css/js的地址
js的地址
跨域
所有的跨域都需要服务器端的允许和配合,如github的部分API允许跨域请求。
修改浏览器安全设置
JSONP
服务端可以返回HTML/Js格式的以动态拼接的数据。
<script>标签可以绕过跨域
服务端允许返回数据,拼接<script src='https://example.js?para'>可以借此获取数据
原生的jsonp(demo并非真跨域,懒得设置端口)
页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> </body> <script> windows.abc = function(data){ console.log(data); } </script> <script src="jsonp.js?callback=abc"></script> </html>
jsonp.js
abc({x:1, y:2});
一般用Jquery实现跨域过程:只能是默认的get方法不是post
$.ajax({ url: 'https://cross-origin.com/x-origion.json', dataType: 'jsonp', jsonpCallback: 'callback', // 一般可以取代success success: data=>{ console.log(data); } }); function callback(data){ console.log(data); }
CORS跨域
在服务端设置响应头http header,使之 Access-Control-Allow-Origin, Access-Control-Allow-Headers, Access-Control-Allow-Methods等属性,使之允许ajax请求
还可以通过 iframe+window/location的属性进行跨域,或者反向代理,暂不研究
这主要是笔记

浙公网安备 33010602011771号