zoukankan      html  css  js  c++  java
  • 跨域问题

    什么是跨域:

    浏览器的同源策略:

    请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同,浏览器拒绝不是当前域域返回的数据

    如果缺少同源策略,浏览器很容易受到XSS,CSFR等攻击


    通常情况下,A网页访问B服务器资源时,不满足以下三个条件其一就是跨域访问
    1. 协议不同
    2. 端口不同
    3. 主机不同

    同源策略限制以下几种行为:

      1.Cookie、LocalStorage、IndexDB无法读取

      2.DOM和JS对象无法获得

      3.AJAX请求不能发送

    如何解决:
    CORS:跨域资源共享

      整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

      因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信


    简单请求:发一次请求

    解决简单的跨域问题:

    http://127.0.0.1:8000 向 http://127.0.0.1:8001端口发请求 http://127.0.0.1:8001端口设置 obj=HttpResponse('数据') obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' return obj

    非简单请求

    非简单请求是发送了两次请求,第一次是预检请求(OPTIONS请求),

    当预检通过,允许我发请求,再发送真实的请求

    同时满足以下两大条件,就是简单请求:

    (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

    django中解决跨域问题:

    安装django-cors-headers模块
    
    在settings.py中配置
    # 注册app
    INSTALLED_APPS = [
        ...
        'corsheaders'
    ]
    # 添加中间件
    MIDDLEWARE = [
        ...
        'corsheaders.middleware.CorsMiddleware'
    ]
    # 允许跨域源
    CORS_ORIGIN_ALLOW_ALL = True


    解决跨域问题:(写好这个中间件注册一下)

    class MyCorsMiddle(MiddlewareMixin):
    def process_response(self, request, response): if request.method == 'OPTIONS': # 允许它 response['Access-Control-Allow-Headers'] = 'Content-Type' # obj['Access-Control-Allow-Headers']='*' # obj['Access-Control-Allow-Origin']='http://127.0.0.1:8000' response['Access-Control-Allow-Origin'] = '*' return response
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/python-Arvin/p/11946736.html
Copyright © 2011-2022 走看看