跨域
什么是跨域?
因为浏览器的安全考虑,有同源策略。只要协议、域名、端口号有一个不同就是跨域,Ajax请求就会失败。
为什么浏览器要使用同源策略?
同源策略主要用来防止CSRF攻击。
CSRF工具:利用用户的登录状态发起恶意请求。如果没有同源策略,那么A网站可以被任意其他来源的Ajax访问到内容。如果你的A网站处于登录状态,那么对方就可以使用Ajax获取到你的任何信息。
思考
请求跨域了,那么请求发送出去了吗?请求是发送出去了,但是浏览器会拦截响应。使用表达的方式可以发起跨域请求,但是浏览器认为Ajax不安全,所以Ajax不能发起跨域请求。这也说明跨域不能完全的阻止CSRF攻击,因为请求毕竟发送出去了。
解决跨域的方法
JSONP
JSONP就是利用<script>
标签没有跨域限制的漏洞。通过<script>
标签指向一个需要访问的地址,并提供一个回调函数来接收数据
CORS
CORS需要浏览器和后端同时支持。浏览器会自行进行CORS通信,实现CORS通信的关键是后端。服务端设置 Access-Control-Allow-Origin
就可以开启 CORS。该属性表示哪些域名可以访问资源,如果没有设置通配符则表示所有网站都可以访问资源。