python web开发中跨域问题的解决思路

1.什么是跨域

在浏览器窗口中,和某个服务端通过某个 “协议+域名+端口号” 建立了会话的前提下,去使用与这三个属性任意一个不同的源提交了请求,那么浏览器就认为你是跨域了违反了浏览器的同源策略

2.如何解决:3种方法

方法1:安装django-cors-headers

方法2:使用JSONP

使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。jsonp只能用于get请求

方案3.直接修改Django中的views.py文件,原理是修改请求头

Vue前端跨域问题解决

单服务器请求配置

折腾了好久,终于找到了正确的方式了,比如说我们要通过http://192.168.31.180:8080/login访问后台接口 http://192.168.31.180:8000/login实现登录功能。设置代理之后代理会检查请求开头是否与代理映射相符,不符合则不走代理,所以使用axios请求的时候无需配置axios.defaults.baseURL属性(否则会跳过代理)。当匹配到映射路径时就会进入代理并将 target属性补全到请求路径。这种方式虽然成功了,但是还是存在之前遇到的缺陷,因为匹配的是‘/’,Vue的路由也符合这一条件,所以刷新后会进入代理配置直接跳转到后台路由了。

 

多服务器请求配置

当我们遇到要访问多个后台接口时,我们可以为每个服务器配置不同代理服务,以映射路径作为区分当我们访问到相应的路径时走对应的代理服务器,但真实的请求中没有该路径,所以我们需要利用pathRewrite属性把该路径去掉。所以为了避免路由直接跳转至后台,一个服务器接口也这种配置,只有在请求接口的时候才走代理。

1,路由请求中添加一个路由标识,如:/api/login(切勿设置axios.defaults.baseURL属性)

2,代理中映射路径指向标识路由,当匹配到映射路径时就会进入代理并 target属性补全到请求路径。

3,利用pathRewrite属性重写路径,还原真实的请求路由。

原文地址:https://www.cnblogs.com/0B0S/p/13686056.html