• nginx 跨域问题解决


    什么是跨域?
    浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
    域名:
     主域名不同 http://www.baidu.com/index.html -->http://www.sina.com/test.js
     子域名不同 http://www.666.baidu.com/index.html -->http://www.555.baidu.com/test.js
     域名和域名ip http://www.baidu.com/index.html -->http://180.149.132.47/test.js
    端口:
     http://www.baidu.com:8080/index.html–> http://www.baidu.com:8081/test.js
    协议:
     http://www.baidu.com:8080/index.html–> https://www.baidu.com:8080/test.js
    备注:
     1、端口和协议的不同,只能通过后台来解决
     2、localhost和127.0.0.1虽然都指向本机,但也属于跨域

    一、为什么会出现跨域问题
    出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

    二、什么是跨域
    当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

    当前页面url 被请求页面url 是否跨域 原因

    当前页面url 被请求页面url 是否跨域 原因

    URL说明是否允许通信
    http://www.a.com/a.js
    http://www.a.com/b.js
    同一域名下 允许
    http://www.a.com/lab/a.js
    http://www.a.com/script/b.js
    同一域名下不同文件夹 允许
    http://www.a.com:8000/a.js
    http://www.a.com/b.js
    同一域名,不同端口 不允许
    http://www.a.com/a.js
    https://www.a.com/b.js
    同一域名,不同协议 不允许
    http://www.a.com/a.js
    http://70.32.92.74/b.js
    域名和域名对应ip 不允许
    http://www.a.com/a.js
    http://script.a.com/b.js
    主域相同,子域不同 不允许
    http://www.a.com/a.js
    http://a.com/b.js
    同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
    http://www.cnblogs.com/a.js
    http://www.a.com/b.js
    不同域名 不允许


    三、非同源限制
    【1】无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB

    【2】无法接触非同源网页的 DOM

    【3】无法向非同源地址发送 AJAX 请求

    解决方案:

    一、使用nginx 的add_header 指令,这个指令可以添加一些头信息。

      这个方法的缺点是,不是所有的浏览器都支持Access-Control-Allow-origin,不能完全规避跨域。

      add  Access-Control-Allow-Origin:*;    #则允许所有域名的脚本访问该资源。

      add  Access-Control-Allow-Methods POST, GET, OPTIONS, DELETE;

    二、使用nginx的反向代理
  • 相关阅读:
    Java面试题集合
    Java RMI 入门指南
    cmd中可以运行java,但不能运行javac命令
    spring+springmvc+maven+mongodb
    Jmeter脚本上一个请求的返回值当下一个请求的参数用(token)
    Jmeter+ant运行脚本,得到HTML报告
    Jmeter录制脚本
    用Jmeter实现SQLServer数据库的增删查改
    Python3安装Requests
    notepad++运行Python
  • 原文地址:https://www.cnblogs.com/fengfengyang/p/15552683.html
Copyright © 2020-2023  润新知