zoukankan      html  css  js  c++  java
  • 跨域 Better



    一、同源策略

    什么是同源策略

    出于安全考虑,浏览器要求:ajax请求的 协议域名端口,必须与当前页面的一致。
    它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。

    不受同源策略约束的场景

    <img src="跨域的图片地址" />
    <link href="跨域的CSS地址" />
    <script src="跨域的JS地址"></script>
    <!-- ↓ 应用 -->
    <!-- 
    	img 可以使用第三方服务,统计打点;
    	link、script 可以使用CDN;
    	script 可以实现JSONP;
    -->
    


    二、跨域

    JSONP

    定义

    Jsonp(JSON with Padding) 既返回json数据的包装,是 json 的一种"使用模式",为了实现跨域读取数据。

    前提

    1. <script>标签不受浏览器的同源策略限制;
    2. 访问一个url,可以返回任意动态拼接的数据, 而不一定是一个文件;

    实现一 (原生)

    <script>
        window.callback = funcion(data) => {
            console.log(data)
        }
    </script>
    <script src="https://api.server.com/getData.js"></script>
    <!-- 
    // getData.js
    callback('helloWorld')
    -->
    
    <!-- 说明
    1. 实际使用中,函数名及参数可以动态的传递给后端(?fucname=xxx&param=xxx)
    -->
    

    实现二 (jQuery)

    $.ajax({
        url: 'http://xxx.yyy/aaa.js',
        dataType: 'jsonp',
        jsonpCallback: 'callback', // 自定义回调函数名称,默认为jQuery生成随机名
        success: function(data) {
            console.log(data);
        },
        error: function() {
            console.log('fail');
        }
    })
    

    参考

    https://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html

    CROS

    实现

    服务端设置 HTTP Header

    response.setHeader("Access-Control-Allow-Origin", "http://www.xyz.com:8000"); // 允许跨域的域名,不建议写 "*"
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
    response.setHeader("Access-Control-Allow-Methods", "PUT,POST,GET,OPTIONS,DELETE");
    
    response.setHeader("Access-Control-Allow-Credentials", "true"); // 接收跨域的 cookie
    

    服务端配置好CROS后,前端不需要特别设置,直接请求就可以。

    参考

    http://www.ruanyifeng.com/blog/2016/04/cors.html

    注意

    • 所有的跨域,都必须经过 Server 端的允许和配合;
    • 未经 server端允许就实现跨域,说明浏览器有漏洞;
  • 相关阅读:
    【bzoj2669】[cqoi2012]局部极小值 容斥原理+状压dp
    默默的等式
    P3403 跳楼机
    作物
    【bzoj3174】[Tjoi2013]拯救小矮人
    【bzoj4976】宝石镶嵌
    BZOJ2121-字符串游戏
    mzf的考验
    牛客网round1
    jloi2015
  • 原文地址:https://www.cnblogs.com/huangtq/p/15788486.html
Copyright © 2011-2022 走看看