zoukankan      html  css  js  c++  java
  • 跨域问题成因和解决方案

    什么是同源策略?
    同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源

    广义跨域

      1. 资源跳转: A链接、重定向、表单提交
      2. 资源嵌入: link script img frame等dom标签,还有样式中background:url()、@font-face()等文件外链
      3. 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等

    常见狭义跨域场景示例

    常见跨域解决方案

    1、 通过jsonp跨域
    2、 document.domain + iframe跨域
    3、 location.hash + iframe
    4、 window.name + iframe跨域
    5、 postMessage跨域
    6、 跨域资源共享(CORS)
    7、 nginx代理跨域
    8、 nodejs中间件代理跨域
    9、 WebSocket协议跨域

     详解:

    1,JSONP解决:

      浏览器不限制标签内src的请求跨域,这样就能跟后端跨域界面进行交互,但是局限性很明显,src只能传送get请求,获取到前端返回来字符串格式的数据。

      不能发送post,因此配合ajax只能发送一些简单的请求

    2,添加响应头(简单请求和复杂请求)

    简单请求满足:

    #HTTP方法是下列方法之一
    
      HEAD, GET,POST
    
    #HTTP头信息不超出以下几种字段
    
      Accept, Accept-Language, Content-Language, Last-Event-ID
    
      Content-Type只能是下列类型中的一个
    
        application/x-www-from-urlencoded
    
        multipart/form-data    text/plain

    复杂请求

      先发送预检请求 OPTIONS,判断这个请求是不是复杂请求的唯一标识
      利用这个功能就能在django中写一个中间件,配置全局的跨域

    class MyCors(MiddlewareMixin):
        # 因为后端不存在跨域,所以在响应返回浏览器之前过中间件时进行添加修改响应信息,规避跨域拦截
        def process_response(self, request, response):         # 在返回响应的时候
            response["Access-Control-Allow-Origin"] = "*"      #允许所有页面
            if request.method == "OPTIONS":
                # 复杂请求会先发预检
                response["Access-Control-Allow-Headers"] = "Content-Type"      #添加请求头
                response["Access-Control-Allow-Methods"] = "PUT,PATCH,DELETE"  #添加请求方式
            return response

    3,,其他的后续再补充

  • 相关阅读:
    Java-ThreadLocal,Java中特殊的线程绑定机制
    java-结合c3p0封装的db 事务 类
    java-事务
    java-jdbc循环设置sql参数
    java-BeanUtils介绍及其使用
    java-el+jstl+jsbc综合示例
    Ajax-jQuery_Ajax_实例 ($.ajax、$.post、$.get)
    各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器
    Tomcat是什么:Tomcat与Java技、Tomcat与Web应用以及Tomcat基本框架及相关配置
    全面理解Java内存模型(JMM)
  • 原文地址:https://www.cnblogs.com/laogao123/p/10455562.html
Copyright © 2011-2022 走看看