最近在工作上遇到了跨域方面的问题,借此温习巩固。
跨域是受到浏览器的同源策略引起的,为了防止某些文档或脚本加载别的域下的未知内容造成泄露隐私,破坏系统等安全行为。
那什么是同源的呢?
同源是指:应用协议、域名(主机或IP)和端口都相同的URL,任意一个不同就是跨域。
跨域直白点讲就是浏览器会限制JS通过xhr请求获取不同源地址的数据。
目前解决跨域问题的主要方式:
像<img>、<script>、<iframe>等标签连接的方式以及jsonp请求方式其实在项目中很少用到。
常用的有:
1、CORS(跨域资源共享,Cross-Origin Resource Sharing)是通过客户端+服务端协作声明的方式来确保请求安全的。服务端可在HTTP响应头中增加参数
“Access-Control-Allow-Origin:* 或 https://www.baidu.com ”,来限制哪些域的请求和哪些请求类型可以接受,而客户端在发起请求时必须声明自己的源(Orgin,由浏览器发送请求时自己加上)。
2、nginx作反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务 器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。
server {
location / {
root /www/data;
index index.html index.htm;
//允许cros跨域访问
add_header 'Access-Control-Allow-Origin' '*';
}
//自定义本地路径
location /apis {
proxy_pass http://www.abc.com;
}
}