@anoninz
2018-03-13T01:04:53.000000Z
字数 3849
阅读 825
面试 笔记
两个部分: 请求报文 响应报文
HTTP 协议采用「请求-应答」模式,普通情况下,每个请求/应答都新建一个连接,完成之后立即断开
Keep-Alive 模式: 1.1 版本 才支持的,使客服端到服务器端的连接持续有效,当出现对服务器的后继请求时,避免了建立或者重新建立连接。
持久连接的情况下,把请求打包发送过去,响应打包发送回来。
请求1->请求2->请求3
- 仅1.1支持
- GET 和 HEAD 可以管鲜花,POST 有所限制
- 初次连接时不应该应用管线机制,因为服务器不一定支持
- 不会影响响应到来顺序
- 不会带来大幅度的性能提升,chrome firefox 默认不开启管线化支持
var o1 = {name: 'o1'}var o2 = new Object({name: 'o2'})var M = function(name) {this.name = name}var o2 = new M('o3')var p = {name: 'p'}var o4 = Object.create(p)

同源策略限制从一个源加载的文档或脚本来自另一个源的资源进行交货。
(同源:同样的端口 协议 域名)
这是一个用于隔离潜在恶意文件的关键的安全机制。
在 postmessage cors 之前
利用 script 标签的异步加载来实现的
1. 本地注册一个全局函数 callback 回调函数
2. 给服务端传一个 callback 名称,参数
3. 服务器传递回来一个内容 jsonp({data:xxx})
4. script.onload监听标签是否加载完成
5. 结束之后及时溢出 script 的 DOM 对象
6. 删除 callback 函数
在页面 A 通过 iframe 或者 frame 嵌入一个跨域的页面 B
var B = document.getElementsByTagName('iframe')B.src = B.src + "#" + 'data';
在 B 中
window.onhashchange = function() {var data = window.location.hash// 如果有其他的需要处理}
窗口 A(http://a.com)向跨域的窗口 B(http://B.com)发送消息
Awindow.postMessage('data', 'http://B.com')
在 B 窗口监听
window.addEventListener('message', function(event) {console.log(event.origin) // https://a.comconsole.log(event.source) // Awindowconsole.log(event.data) // data}, false)
var ws = new WebSocket('wss:// a.org')ws.onopen = function(e) {console.log('Connection open ...')ws.send('hello')}ws.onmessage = function(e) {console.log(e.data)ws.close()}ws.onclose = function(e) {console.log('connection closed')}
浏览器会拦截 ajax 请求,如果浏览器认为这是跨域的,会在 HTTP 头中加一个 origin 再发送
fetch('/some/url', {method: 'get',}).then((res)=>{}).catch((err)=>{})

向你页面注入脚本,提交 script 标签,
让 xss 注入不可执行
xss 向页面注入 script 标签,在 script 里面做想做的事情
csrf 利用本身的漏洞,自动执行接口,依赖用户需要登录网站
DTD(document type definition,文档类型定义)是一系列的语法规则,用来定义 XML 或者 (X)HTML的文件类型,浏览器会使用它来判断文档类型,决定使用何种协议来解析,以及切换浏览器模式。
DOCTYPE用来生命文档类型和 DTD 协议的,一个主要用途是文件的合法验证,如果不合法,name 浏览器解析时就会出现一些差错。
直接告诉浏览器,当前文档是哪个 DTD。

DOM 结构中的各个元素都有自己的盒子模型,这些都需要浏览器根据各种样式来计算并根据计算结果将元素放到它该出现的位置,这个过程叫重排 reflow
触发条件:
- 增加删除修改 DOM 节点时,reflow+repaint
- 移动 DOM 位置,或者做动画的时候
- 修改 CSS 样式的时候
- Resize 窗口的时候,可能会
- 修改网页默认字体的时候
当各种盒子的位置、大小、属性(颜色、字体大小)确定下来之后,浏览器于是把这些元素都按照各自的特性绘制一遍,于是内容出现了。这个过程叫 repaint
触发条件:
- DOM 改动
- CSS 改动
如何尽量降低 repaint 频率?
先创建一个片段,然后一并塞进去,最后再加入页面上
JS 的单线程
任务队列:同步任务队列,异步任务
Event Loop
哪些语句会放入异步任务队列
理解语句放入异步任务队列的时机
提升页面性能的方法:
- 资源压缩合并,减少 HTTP 请求
- 非核心代码异步加载 -> 异步加载的方式 -> 异步加载的区别
- 利用浏览器缓存 -> 换准的分类 -> 缓存的原理
- 使用 CDN
- 预解析 DNS
// 强制打开 https 页面的 a 标签预解析<meta http-equiv="x-dns-prefetch-control" content="on">// 预解析 DNS<link rel="dns-prefetch" href="//host_name_to_prefetch.com">
