js5

1.浏览器为什么要阻止跨域请求? 如何解决跨域?每次跨域请求都需要 到达服务端吗?

为什么要阻止跨域请求?

跨域请求会带来很多安全问题。比如cookie允许跨域访问的话,别的网站通过一段脚本就可以获取cookie,来冒充用户身份去登录账号,造成很大的损失;

如何解决跨域?

window.name/iframe: 通过设置window.name + iframe,其他页监听window.name的变化,从而实现跨域信息的访问;

window.domain/iframe: 在一级域名相同,二级不同的时候,可以用window.domain + iframe 实现跨域访问;

postMessage: html5 postMessage API 允许两个窗口之间进行跨域发送消息;

jsonp: 通过 script、img 标签访问不同域的URL实现跨域;通过url中的指定的参数为回调函数,通过回调函数中的参数获取数据;jsonp只限于get请求;

CORS: 浏览器跨域同源共享资源,它允许浏览器跨域发送xmlHttpRequest请求;需要服务器配置: Access-Control-Allow-Origin: 允许的域名,设置通配符 * 或者单个域名; Access-Control-Allow-Methods: 允许跨域请求的http请求方法;如(get,post...等);CORS分为简单 请求和非简单请求;

服务器代理:由于服务器不存在跨域问题,所以可以请求所要域的资源再返回给客户端。

每次跨域请求都需要 到达服务端吗?

跨域请求可以被发起,但是被浏览器拦截了返回结果;请求还是会被发送到服务器的;

2.Token 一般是存放在哪里? Token 放在 cookie 和放在 localStorage、sessionStorage 中 有什么不同?

存放在cookie里,每次请求会带上它,但是不能跨域访问;

存放在localStorage里,每次请求当成一个字段传给服务器;

cookie可以设置httponly,防止被JavaScript读取,也可以制定secure,来保证token只在HTTPS下传输;但是容易遭受CSRF攻击;

localStorage 存储空间大,可防止CSRF攻击;但是容易遭到XSS攻击;

3.WebSocket 是怎么实现点对点通信和广播通信的?

WebSocket 是服务器端可以推送消息给客户端,客户端也可以主动向服务器发送信息,是真正的双工通信,属于服务器通信的一种方式;

广播通信即服务端有消息时,会将所有消息发送给连接了当前endpoint的浏览器;

点对点通信 如用户一对一的通信,可以互相发送消息给彼此;

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。