admin管理员组

文章数量:1530332

1、什么是跨域?

跨越是产生于浏览器的"同源策略",所谓同源策略是指:
1)协议:http、https
2)域名:www.baidu、uland.taobao …
3)端口:80,8080…

上面四点均一样的情况下,才允许访问相同的cookie、localStorage 和 发送Ajax 请求。如果上面其中一点不同都会出现跨越问题。

2、浏览器为何禁止跨越请求?

1)如果跨域可以请求的话,很多的服务器都会受到额外的攻击;
2)黑客可以在别人的网站代码里面去恶意的攻击其他公司的服务器;
3)因为浏览器是客户端,客户端的群体太大,而服务器是可以随便哪里都可以访问的,没有限制。

3、那么如何去解决浏览器跨越呢?

总的来说有五种方法:前端jsonp,服务器nginx 反向代理,CORS,浏览器配置(谷歌Google Chrome),后台语言处理,websocket

  • jsonp

    *实现原理:利用浏览器对页面html标签中的src属性发起的ajax请求不受同源策略影响这个‘bug’,实现的跨域请求。
	var script = document.createElement('script');
		script.type = 'text/javascript';
		// 传参并指定回调执⾏函数为onBack
		script.src = 'http://www.....:8080/login?user=admin&callback=onBack';
		document.head.appendChild(script);
		// 回调执⾏函数
		function onBack(res) {
		 alert(JSON.stringify(res));
}
  • nginx 反向代理、node中间件http-proxy-middleware代理

  • CORS

    • 通过设置响应头内容实现跨域
	"Access-Control-Allow-Origin":"*", //允许所有域
    "Access-Control-Allow-Headers":"Content-Type,Content-Length, Authorization, Accept,X-Requested-With",//请求头类型
    "Access-Control-Allow-Methods":"PUT,POST,GET,PATCH,DELETE,OPTIONS"//请求方法类型
  • 浏览器设置 (只适用于谷歌调试使用)

  • 后台语言处理

  • websocket

    • socket 请求不存在跨域问题

总结

json只能应用在get请求中,websocket只能适用于socket中,其他解决方案都适用

//持续更新,请留意

本文标签: 浏览器如何解决