跨域:由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题
JSONP
总:JSONP 是服务器与客户端跨源通信的常用方法。利用了使用src引用静态资源时不受跨域限制的机制。
细:
- 网页添加一个 script 标签,向服务器请求一个脚本。请求的脚本网址有一个callback参数(?callback=bar),用来告诉服务器,客户端的回调函数名称(bar)。
- 服务器收到请求后,拼接一个字符串,将 JSON 数据放在函数名里面,作为字符串返回(bar({…}))。
- 客户端会将服务器返回的字符串,作为代码解析,这时,客户端只要定义了相应的函数,就能在该函数体内,拿到服务器返回的 JSON 数据。
正:就是简单易用,没有兼容性问题,老式浏览器全部支持,服务端改造非常小。
反:只能发GET请求(因为 JSONP 是通过动态创建 script 实现的,script 只能发送 get 请求)
补:用CORS 。CORS 允许任何类型的请求。
CORS
总:跨域资源共享。
细。核心就是设置 response header。分为简单请求和复杂请求两种。
简单请求:只需要设置 Access-Control-Allow-Origin:目标源
复杂请求:
1.浏览器发起 OPTIONS 请求。把服务器支持的操作通过响应头来表明。如Mehtod、是否接受请求中的 Cookie。
2.真实请求。
正:CORS 支持所有类型的 HTTP 请求
反:一些古老浏览器不支持 CORS。
补:用 JSONP,老式浏览器全部支持。
Vue项目如何配置跨域
1.在vue.config.js中添加proxy进行反向代理实现前端跨域