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

    1.跨域

    由于浏览器具有“同源策略”的限制。
    如果在同一个域下发送ajax请求,浏览器的同源策略不会阻止。
    如果在不同域下发送ajax,浏览器的同源策略会阻止。
    

    2.解决跨域:CORS

    CORS,跨站资源共享,本质:设置响应头。
    
    from django.shortcuts import render,HttpResponse
    
    def json(request):
        response = HttpResponse("JSONasdfasdf")
        response['Access-Control-Allow-Origin'] = "*"
        return response
        
    

    3.跨域时,发送了2次请求?

    在跨域时,发送的请求会分为两种:

    • 简单请求,发一次请求。

      设置响应头就可以解决
      from django.shortcuts import render,HttpResponse
      
      def json(request):
          response = HttpResponse("JSONasdfasdf")
          response['Access-Control-Allow-Origin'] = "*"
          return response
      
      
    • 复杂请求,发两次请求。

    • 预检

    • 请求

      @csrf_exempt
      def put_json(request):
          response = HttpResponse("JSON复杂请求")
          if request.method == 'OPTIONS':
              # 处理预检
              response['Access-Control-Allow-Origin'] = "*"
              response['Access-Control-Allow-Methods'] = "PUT"
              return response
          elif request.method == "PUT":
              return response
      
    条件:
        1、请求方式:HEAD、GET、POST
        2、请求头信息:
            Accept
            Accept-Language
            Content-Language
            Last-Event-ID
            Content-Type 对应的值是以下三个中的任意一个
                                    application/x-www-form-urlencoded
                                    multipart/form-data
                                    text/plain
     
    注意:同时满足以上两个条件时,则是简单请求,否则为复杂请求
    

    4.总结

    1. 由于浏览器具有“同源策略”的限制,所以在浏览器上跨域发送Ajax请求时,会被浏览器阻止。
    2. 解决跨域
      • 不跨域
      • CORS(跨站资源共享,本质是设置响应头来解决)。
        • 简单请求:发送一次请求
        • 复杂请求:发送两次请求,先options请求做预检,然后再发送真正请求
  • 相关阅读:
    POJ 2485 Highways && HDU1102(20/200)
    easyui 后台框架搭建
    启动第二个Activity
    Apache配置基于域名的虚拟主机
    POJ_1679_The Unique MST(次小生成树模板)
    MySQL学习笔记
    数据库学习之简单的SQL语句
    HDU-4643-GSM(DFS)
    Android Studio VS Eclipse (还在用Eclipse?你OUT了!)
    使用国内镜像源来加速python pypi包的安装
  • 原文地址:https://www.cnblogs.com/fengqiang626/p/11876556.html
Copyright © 2011-2022 走看看