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

    一:同源策略

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

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

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

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

    已拦截跨源请求:同源策略禁止读取位于 http://127.0.0.1:8001/SendAjax/ 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin'

    但是注意:项目中的访问以及发生了,说明是浏览器对非同源请求返回的结果做了拦截。

    同源策略:浏览器基本的安全策略

         当前页面只能朝当前域的地址发送请求

      不同的域:ip+端口+协议  三者都相同才是同一个域

    二:CORS跨域资源共享

    简单请求和非简单请求:

      1.只要符合如下两条,就是简单请求,否则是非简单请求

        (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

      2.简单请求只发一次请求

      3.非简单请求发两次:一次是OPTIONS预检请求,预检请求同意我发,我再发起第二次真实请求,一次是真实的请求以后处理跨域问题(可以用第三方的django-cors-headers)

      4.写一个中间件

                    class MyMiddleware(MiddlewareMixin):
                        def process_response(self,request,response):
                            #处理了简单请求
                            response['Access-Control-Allow-Origin'] = '*'
                            #处理非简单请求
                            if request.method=='OPTIONS':
                                response['Access-Control-Allow-Headers']='*'
                                # response['Access-Control-Allow-Methods']='PUT,PATCH'
                                response['Access-Control-Allow-Methods']='*'
    
                            return response
                -在setting中配置
  • 相关阅读:
    Vue对象提供的属性功能
    Vue快速入门
    Django-DRF(路由与扩展功能)
    Django-DRF(视图相关)
    Django-DRF(1)
    Django-Xadmin
    python 列表的append()和extend()
    map apply applymap
    pd.merge(), pd.concat()
    描述性分析与数据清洗 笔记
  • 原文地址:https://www.cnblogs.com/liuxiaolu/p/10638828.html
Copyright © 2011-2022 走看看