# 浏览器

# BOM和DOM的理解

# 讲一下浏览器的缓存

# Url输入到展示的过程

# 解决跨域

出于浏览器的同源策略限制。

同源策略是一种约定,出于安全考虑,防止数据被其他网站轻松获取。

同源策略会阻止一个域的javascript脚本和另一个域的内容进行交互。

跨域同源(协议、域名、主机、端口号相同),其中任何一个不同都会引起跨域

解决方法:

1、jsonp

优点:简单适用,兼容性好(兼容低版本IE)

缺点:只支持get请求,不支持post请求

原理:动态创建<script>标签,利用<script>的src不受同源策略约束来跨域获取数据

组成:由回调函数和数据两部分组成,回调函数是当响应时应该在页面中调用的函数,回调函数的名字一般在请求中指定。而数据就是传入回调函数中的JSON数据。

2、前端vue开发模式跨域

// vue.config.js中加入proxy设置
devServer:{
    port:4399,
    host:'localhost',
    https:false,
    open:true,//vue项目启动时自动打开浏览器
    // hotOnly:true,
    // overlay:{//让浏览器overlay同时显示警告和错误
    //     warning:true,
    //     errors:true
    // },
    proxy:{
        "/api/":{ // 是代理标识,用于告诉node,url前面是/api的就是使用代理的
            target:"http://localhost:5520",//目标地址,一般是指后台服务器地址
            changOrigin:true,//是否跨域允许开启代理,创建虚拟服务器
            pathRewrite:{//作用是把实际Request Url中的'/api'用""代替
                "^/api":''
            }
        }
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

3、nginx跨域

nginx反向代理请求到后端允许访问的地址上,就变相解决了跨域,同时也便于管理,和服务器安全问题。nginx可以像一个网关一样代理各种不同的业务需求

location ^~/api/ {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forworded-For $proxy_add_x_forwarded_for;
    proxy_pass http://localhost:5200/;#这里是后端接口地址
}
1
2
3
4
5

4、node后端cors

CORS是一个W3C标准,全称是“跨域资源共享”(Cross-origin resoure sharing)
1

后端服务可以开启跨域允许

const urlArray = [
    'http://localhost:4399',
    'http://localhost:4400',
    'http://127.0.0.1:4401',
    'http://localhost:4402',
    NGINX_URL,
    NGINX_URL_TLS];

app.use(cors({
    origin: function (ctx) {
        // let url = ctx.header.referer.substr(0,ctx.header.referer.length - 1);
        console.log(ctx.url);
        console.log('cors',ctx);
        // return urlArray
        return "https://localhost.cn:443"
    },
    maxAge: 5,
    credentials: true,
    allowMethods: ['GET', 'POST', 'DELETE'],
    allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
    exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
}))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Last Updated: 3/6/2022, 7:13:50 PM