跨域出现的场景:
1. 前后端分离项目开发
2. 前端真的是想去请求其它IP、PORT下的api接口
跨域:
只有web前端会出现的情况,浏览器的保护机制。
请求的IP、端口和当前在访问的网站不同,就会产生跨域。
跨域的出现:
例如在自己的网站,需要从百度接口获取内容,以前端角度去请求内容,就会产生跨域。
跨域的运行机制:
前端访问跨域网站接口,会自动发送一个OPTIONS请求,之后在跟随一个自己的请求,如果OPTIONS请求被拒绝,后端的请求则失败,如果OPTIONS请求后端设置通过,第二个请求后端没有设置通过,照样是请求失败。
跨域需要注意的:
跨域请求不能携带cookie(个人研究了半天,没搞定)。
后端的解决跨域的方式1:
1. 在响应中间件搞事情,给响应头添加些字段即可。
// *表示所有都可以
// Methods是允许跨域的请求方式
// Origin是允许跨域请求的地址(如自己的后端是192.168.1.10:9000,第三方是192.168.2.10:9000,那么这里如果指向一个地址允许跨域就填写,'http://192.168.1.10:9000'即可实现一个允许的,如果可能多个用逗号分隔)
// Origin注意:地址头需要完全一样,才能通过
2. 项目settings文件加入这个自定义中间件
前提:后端是自己方开发的
使用场景:前后端分离项目开发中
后端解决方式2:
使用Ngnix做代理,由Nginx返回静态文件和它和后端交互。
前提:不涉及第三方接口时候
使用场景:项目上线时候使用
后端解决方式3(跨域只是浏览器的限制):
前端请求自己的后端接口,后端去请求第三方的接口,拿到内容,给前端返回。
使用场景:项目上线了,第三方后端没有做跨域处理时候(伪造前端式请求,通过requests模块)