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

跨域问题

时间:2024-05-10 16:01:20浏览次数:14  
标签:Control Access 浏览器 跨域 问题 response 请求

浏览器同源策略

它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现,是浏览器对访问到的结果进行了拦截。

请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.

比如:我在本地上的域名是127.0.0.1:8000,请求另外一个域名:127.0.0.1:8001一段数据

浏览器上就会报错,这个就是同源策略的保护,如果浏览器对javascript没有同源策略的保护,那么一些重要的机密网站将会很危险。

跨域资源共享

通过一些办法

允许不同的域去服务器拿数据

首先要知道跨域请求分类

  • 简单请求
只要同时满足以下两大条件,就属于简单请求
    (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

# 通过预检的方式
     => 如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过
        Access-Control-Request-Method
     => 如果复杂请求设置了请求头,则服务端需要设置允许某请求头,否则“预检”不通过
        Access-Control-Request-Headers

解决跨域问题

简单请求跨域问题解决

由于在浏览器中的报错信息提示:
No 'Access-Control-Allow-Origin' header is present on the requested resource.

因此需要为服务器设置响应头:
Access-Control-Allow-Origin = ‘域名’ 或 ‘*’

代码示例

# 被访问的服务端的视图类代码
from rest_framework.views import APIView
from rest_framework.response import Response


class TestView(APIView):
    def get(self,request):
        print('green_nb')
        # 需要在被访问的服务端的response对象中加入'Access-Control-Allow-Origin':'http://127.0.0.1:8002',意思就是当我向http://127.0.0.1:8002发送数据时,对方浏览器允许接收我的数据
        return Response('ok',headers={'Access-Control-Allow-Origin':'http://127.0.0.1:8002'})


    def post(self,request):
        print('green_super_nb')
        return Response('ok',headers={'Access-Control-Allow-Origin':'http://127.0.0.1:8002'})

非简单请求跨域问题解决

方案:使用自定义中间件

from django.utils.deprecation import MiddlewareMixin


class CorsMiddleware(MiddlewareMixin):
    def process_response(self, request, response):
        response['Access-Control-Allow-Origin'] = '*'
        if request.method not in ['POST', 'GET']:
            response['Access-Control-Allow-Headers'] = 'Content-Type'
        return response

标签:Control,Access,浏览器,跨域,问题,response,请求
From: https://www.cnblogs.com/Hqqqq/p/18184558

相关文章

  • vue3 vite项目H5页面 ios13进入页面出现白屏问题
    项目中碰见IOS系统进入页面出现白屏问题,记录一下问题排查过程一、页面可能报错进入页面是白屏,页面的 vconsole 也没有显示,首先想到的是页面是不是有什么报错,然后查看了别的机型,都没有问题,定位到只有IOS13有问题,想着会不会是什么语法在IOS13不兼容(这个问题之前出现过一个......
  • 跨境物流网站海外客服系统对接ChatGPT大模型AI自动回复问题
    去年的一个客户,主要是做跨境电商的物流运输服务,有自己的物流网站系统。海外客户会在物流系统里咨询很多问题,有不少经常问的问题。这个时候就可以对接AI大模型,上传自己的问答数据到知识库,让AI来自动回复问题。GPT知识库是支持多语种的,可以中英文上传知识库,都能理解并回复 上......
  • ROS常见问题
    编译时报错:AttributeError:module'em'hasnoattribute'Interpreter'问题就出在了这个em包上,我们在编译时候用的是empy包,而python里还有一个叫em的包,这个包并不需要!但是,这两个包调的用都是em。piplist|grepemem0.4.0empy......
  • mqtt总是自动断开重连的问题
    1、问题:在使用mqtt进行数据接收并将其转发到kafka的过程中,出现了个问题,mqtt总是自动断开并尝试重连,但是很快就又断开尝试重连,如此反复。在代码中通过实现 MqttCallbackExtended 接口来进行mqtt的主题订阅,重连,消息接收等功能;1)、clientID也使用了时间戳来定义,保证不会出现重复......
  • 遗传算法求解经典车间调度问题(JSP)
    车间调度问题Job-Shopschedulingproblem(JSP)车间调度问题(NP-hard问题):​ n个工件在m台机器上加工,每个工件有特定的加工工艺,每个工件加工的顺序及每道工序所花时间给定,安排工件在每台机器上工件的加工顺序,使得某种指标最优。题设为:1)不同工件的工序之间无顺序约束;2)工序开始则......
  • WPS 提示"图片太大,超过部份将被截去" 问题处理
    再win10上使用wps-et打开xlsx后,如果剪切或负值一整行数据时,有以下提示:"图片太大,超过部份将被截去" 主要问题在于win10的剪贴板历史功能开启。只要将其关闭即可解决此问题 另外,其他的剪贴板工具也会造成此问题.例如Ditto.关闭他们即可解决这个问题.......
  • Netty发送消息无法接收问题
    Netty发送消息无法接收问题原因:参考官网案例代码,继承ChannelHandlerAdapter类,则writeAndFlush只接受ByteBuf对象,因此需要将需要发送的数据转换成ByteBuf其他字符串转ByteBufStringstr="haha";ByteBufbyteBuf=Unpooled.wrappedBuffer(str.getBytes());数字转Byte......
  • Linux问题--docker启动mysql时提示3306端口被占用(kill不掉3306端口)
    使用kill-9杀掉mysqld服务时一直失败。mysql启动时会启动mysqld和mysqld_safe两个进程,当使用kill-9杀掉mysqld进程时,mysqld_safe会自动重新启动mysqld。当使用正常方式退出mysqld时,mysqld_safe也会退出。如果需要kill掉mysqld服务可以先通过lsof-i:3306查询到占用3306......
  • 瑞萨问题排查记录
    P1当把RFD28F添加进项目时,报错如下:参考链接:https://www.sekorm.com/news/73776172.html栈溢出.textE0562330:Relocationsizeoverflow:"DefaultBuild\sample_control_codeflash.obj"-".text"-00000b(1)右键Subproject的CC-RH——LinkOptionsTab——S......
  • vue-router单页面应用的多标签页使用问题
    正常的思维做多vue页面应用,我们的第一反应是配置多个入口点,多个vue应用,编译成多个HTML文件,由服务器来决定路由。这是正常的思维。但谁知道单页面应用也能做到类似的效果呢。单页面不过是服务器路由变成了客户端路由,但通过一些技巧,也能实现类似服务器多页面路由的效果。客户端路......