有几种跨域方式
- 协议跨域,例如从 http 站点访问 https 站点。
- 主机跨域,例如从 a.baidu.com 访问 b.baidu.com
- 端口跨域,例如从80端口的站点访问8080端口的站点。
谈起Jsonp在跨域处理方案中也算鼎鼎大名,这是一种非官方的解决方案,源于浏览器允许一些带src属性的标签跨域,例如iframe、script、img等。而Jsonp即是利用了script加载外部脚本的功能。
方案虽然可行,但也同时意味着jsonp只能发起get请求,对于post就无能为力了。
常见的和自己熟悉有几种方案
如:
1、用cros;
2、用代理;
3、使用jsonp
jsonp 作为一种跨域的解决方案
意思是用跨域的时候会出现不同源的安全机制。但是呢 js img a链接等就不会被安全机制干扰
那么怎么处理呢
在js里面 使用回调函数 callback=addNum
没错就是使用回调,首先说一下思路:
1、首先在页面中定义好回调函数;
2、然后在页面通过插入相关标签待query参数的形式实现jsonp请求传递回调函数名字;
3、后台得到回调函数名字,并将需要处理的数据传递给回调函数,最后向前台返回回调函数的“调用”,
跨域解决方案之CORS
CORS,也即 Cross-Origin Resource Sharing(跨域资源共享),它需要现代浏览器的支持,是一种更安全的官方解决方案。
CORS使得以下常见场景得到支持:
1. 使用 XMLHttpRequest 或 Fetch 发起跨站 HTTP 请求。
2. web 字体(css 中通过 @font-face 使用跨站字体资源)
3. 使用 drawImage 绘制 Images/video 画面到 canvas
● 只使用 GET 、HEAD 或者 POST 发起请求,如果使用 POST ,那么其数据类型( Content-Type )只能是 application/x-www-form-urlencoded、 multipart/form-data 或text/plain中的一种。
● 不使用自定义请求头
这种跨域请求非常简单,只需要后端在返回的响应头中添加Access-Control-Allow-Origin属性并将被允许的站点填入即可(多个站点逗号隔开,允许所有站点则设为*)