首页 > 其他分享 >跨域问题解决

跨域问题解决

时间:2023-02-28 20:13:31浏览次数:47  
标签:浏览器 跨域 中间件 问题 简单 解决 response 请求

目录

跨域请求问题解决

同源策略(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 中间件中即可

标签:浏览器,跨域,中间件,问题,简单,解决,response,请求
From: https://www.cnblogs.com/moongodnnn/p/17165795.html

相关文章

  • 解决 Private Network Access(CHrome 94问题)
    长期解决方案针对企业级的解决方案:我们可以通过管理员控制的方式来更改chrome的相关配置,参考临时解决方案。针对SaaS用户首选方案是将站点部署为HTTPS,引用Chrome......
  • 前后端分离-跨域问题详解
    一、跨域问题详解什么是跨域问题:跨域问题只会出现在前后端分离项目中,在前后端分离项目中,前端发送ajax请求到后端会跨域问题拦截,导致这个问题的原因是“同源策略”什么是......
  • react-native学习记录1(都是坑,各种版本问题,让人望而却步)
    1.环境搭建https://zhuanlan.zhihu.com/p/528196912?utm_id=02.创建项目npxreact-nativeinitsomeProject--version0.66.0npxreact-nativerun-android生命周期,路由,......
  • Linux Qt编译时出现has modification time int the future的解决方法
    问题场景:我在window系统上合并完代码后,将代码通过TF卡拖到了Debian系统的开发板子上(为什么我不用Winscp或者xhttp传呢?因为网线被同事拿走了。。。),然后就报这个错。网上查......
  • xml文档操作的一个问题记录
    关于xml文件转换报错问题在一次UAT测试环境中发现的有关xml文件操作的问题,程序加载模板文件**.xsl(一种xml格式的文件),读取一个xml文件内容,将xml转换为预期的一个xml,在根据......
  • JavaScript文件夹上传解决方案
    ​ 项目描述工具类包封装了一些关于分片md5验证、断点续传、分片上传、等方法前端样例使用百度插件WebUploader,插件的源码还是有一定的问题的分片上传是需要前后......
  • 恒创科技:服务器常见错误代码501什么意思?怎么解决?
    ​作为网站所有者,很少有情况比打开您的网站时收到HTTP错误代码更令人恼怒和困惑,除非您精通网站运营的后端基础设施和网络配置方面。对于501NotImplementedHTTP......
  • JsonResponse中文乱码问题
    直接使用JsonResponse返回结果中文乱码returnJsonResponse({'ret':0,'msg':f'id为{customer_id}的客户信息删除成功'})解决乱码问题可以添加json_dumps_params={'e......
  • JS文件夹上传解决方案
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持......
  • 解决Java读取数据库的时间类型时大8小时时差问题
    解决办法:在jdbc连接中设置serverTimezone参数,指定为东八区,可以使用serverTimezone=Asia/Shanghai或者serverTimezone=GMT%2b8如:jdbc:mysql://127.0.0.1:3306/demo_ds......