跨域
跨域是什么?
当前页面中的某个接口请求的地址和当前页面的地址如果协议、域名、端口其中有一项不同,就说该接口跨域了。
跨域限制的原因:
浏览器为了保证网页的安全,出的同源协议策略。
跨域的解决方案
-
cors:目前最常用的一种解决办法,通过
设置后端允许跨域实现
。 res.setHeader(‘Access-Control-Allow-Origin’, ’*’); res.setHeader(“Access-Control-Allow-Methods”, “GET, PUT, OPTIONS, POST”); -
node中间件、nginx反向代理:跨域限制的时候浏览器不能跨域访问服务器,node中间件和nginx反向代理,都是让请求发给代理服务器,静态页面面和代理服务器是同源的,然后代理服务器再向后端服务器发请求,服务器和服务器之间不存在同源限制。
-
JSONP:利用的原理是script标签可以跨域请求资源,将回调函数作为参数拼接在url中。后端收到请求,调用该回调函数,并将数据作为参数返回去,注意设置响应头返回文档类型,应该设置成javascript。
粗略的JSONP部署很容易受到跨站请求伪造(CSRF/XSRF)的攻击[1]。因为HTML “标签在浏览器里不遵守同源策略,恶意网页可以要求并获取属于其他网站的JSON资料。当用户正登录那个其他网站时,上述状况使得该恶意网站得以在恶意网站的环境下操作该JSON资料,可能泄漏用户的密码或是其他敏感资料。
只有在该JSON资料含有不该泄漏给第三方的隐密资料,且服务器仅靠浏览器的同源策略阻挡不正常要求的时候这才会是问题。若服务器自己决定要求的专有性,并只在要求正常的情况下输出资料则没有问题。只靠Cookie并不够决定要求是合法的,这很容易受到跨站请求伪造攻击。
- postmessage:H5新增API,通过发送和接收API实现跨域通信。