跨域问题

一:同源策略

同源策略(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中配置
原文地址:https://www.cnblogs.com/liuxiaolu/p/10638828.html