跨域问题解决

跨域请求问题解决

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

什么是同源:请求的地址 必须在同一个域上 必须要 端口 ip 协议都要一样

问题:我们前端发送的ajax请求,到后端 那肯定不同源,所以导致我们请求成功后数据也无法返回,数据会被浏览器拦截

我们在浏览器中输入的域名其实也是 ip地址 默认都是80端口

补充:浏览器中输入域名,没有加端口

-www.baidu.com---->dns--->解析成地址  192.168.2.3----》没有加端口,默认是80
-dns解析,先找本地的host文件
	-可以修改本地的host做映射
	-键值对的形式   127.0.0.1 www.moongod.com  
	 # 这样当你在浏览器输入 www.moongod.com 会解析为 127.0.0.1

解决跨域问题方式

方式一:CORS方法,后端代码控制

# 第一步:安装
	pip install django-cors-headers
  
# 第二步:配置app
    INSTALLED_APPS = [
        'corsheaders'
    ]
  

# 第三步:配置中间件
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
    ]
  
  
  
# 第四步:在配置文件配置
# 允许所有域
CORS_ORIGIN_ALLOW_ALL = True
# 允许的请求方式
CORS_ALLOW_METHODS = (
	'DELETE',
	'GET',
	'OPTIONS',
	'PATCH',
	'POST',
	'PUT',
	'VIEW',
)
# 允许请求头中加的东西
CORS_ALLOW_HEADERS = (
	'XMLHttpRequest',
	'X_FILENAME',
	'accept-encoding',
	'authorization',
	'content-type',
	'dnt',
	'origin',
	'user-agent',
	'x-csrftoken',
	'x-requested-with',
	'Pragma',
	'token',
)

# 这样配置就解决了跨域问题

方式二:Nginx反向代理

简单请求与非简单请求

1) 请求方法是以下三种方法之一:
        HEAD
        GET
        POST
  (2)HTTP的头信息不超出以下几种字段:
        Accept
        Accept-Language
        Content-Language
        Last-Event-ID
        Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
        
 # 这都是简单请求,非简单请求就是除去 以上简单请求、

非简单请求会先发送一个options,如果运行,再发真正的请求
所以我们要后端先通过options请求

自己编写中间件处理

跨域资源共享,后端处理,本质就是在响应头中加入了固定的头通过浏览器的拦截即可

在utils中编写中间件文件 common_middle


from django.utils.deprecation import MiddlewareMixin
# 编写中间件需要解除的类

class CorsMiddleWare(MiddlewareMixin):
    def process_response(self,request,response):
        if request.method=="OPTIONS": 
          # 解决非简单请求的请求头
          #请求头里可以加任意数据 *
            response["Access-Control-Allow-Headers"]="*"

        # 允许前端的地址,所有请求头允许
        response["Access-Control-Allow-Origin"] = "*"
        return response
      
      
 把编写的中间件注册到django 中间件中即可
posted @   Python-moon  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示