1. 什么是跨域?
就是在一个域名内访问另一个域名的资源 , 跨域的问题主要是因为同源策略造成的 同源策略就是一种约定 是浏览器的安全功能 . 虽然发送ajax跨域会有返回值 但是浏览器会觉得不安全给你拦截下来了 就好像你去了高风险地区现在要回家 , 但是不让你回怕有危险差不多
跨域就是三者不同源的原因 何为三者? 就是 协议 , 域名 , 端口 只要一个不一样就是跨域 , 给大家举个小例子
http://www.857.com/index.html 和 http://www.857.com/index.html 不是跨域 三者都是相同的
http://www.aaa.com:3000/index.html 和 https://www.aaa.com:3000/index.html 跨域 协议不相同
http://www.aaa.com/index.html 和 http://www.bbb.com/index.html 这个就是域名不用 是跨域
http://www.aaa.com:3009/index.html 和 http://www.aaa.com:8080/index.html 跨域 因为端口号不相同
小注意点 : localhost:3000/index.html 和 127.0.0.1:3000/index.html 虽然都是指本机 但是要注意 这俩者之间是跨域
2.如何解决跨域的问题
我这里使用的一个第三方的包 可以很方便的解决跨域问题
- CORS
什么是cors : CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest
请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10(ie8通过XDomainRequest能支持CORS)。
跨域错误说明 :
1.自己手写 : 通过在被请求的路由中设置header头,可以实现跨域。
2.使用cors : 因为是一个npm包 所以我们需要下载cors , 当做express中的中间件,注意代码应该放在顶部