前端面试的经典题第二弹
2017-04-08 本文已影响112人
brandonxiang
http缓存的meta标签
HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。
- Cache-Control
- no-cache 浏览器和缓存服务器不缓存页面信息
- private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理
- must-revalidate 对于客户机的每次请求,服务器验证缓存是否过时
- public 浏览器和缓存服务器可以缓存页面信息
- no-store http信息不被存储在对方的磁盘系统
- Pragma
- Pragma
- no-cache
- last-modified 只页面的最后生成时间,GMT格式
- Expire 指的是过期的时间,过了某个时间点后从真正的服务器众获取新的页面信息
1) 打开新窗口 值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。 而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如: Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)
2) 在地址栏回车 值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。 值为no-cache,那么每次都会访问。 值为max-age,则在过期之前不会重复访问。
3) 按后退按扭 值为private、must-revalidate、max-age,则不会重访问, 值为no-cache,则每次都重复访问
4) 按刷新按扭 无论为何值,都会重复访问。Cache-control值为“no-cache”时,访问此页面不会在Internet临时文件夹留下页面备份。
来自《html头文件设置常用之<meta>设置缓存》
跨域CORS的步骤
简单请求
主要是指GET,POST,HEAD三种请求方式。
HTTP头文件不超出下面的方式:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
- 浏览器端:使用GET或者POST发送的请求,根据你请求的地址,给它附加一个额外的Origin头部,其中包含请求页面的源信息(协议、域名和端口)。这个动作大部分浏览器是自动的,除了IE8,它引用的是XDR。
- 服务端:如果认为这个请求接受,就在Access-Control-Allow-Origin头部中回发相同的源信息。
例如:Access-Control-Allow-Origin:http://www.test.com
非简单请求(Preflighted Requests)
它支持GET,POST,HEAD以外事件的方法。
浏览器端会根据你的请求方法和添加的头信息自动添加除了Origin外还有下面两个属性。
- Access-Control-Request-Method 该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT
- Access-Control-Request-Headers 该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段
服务端确认允许跨源请求,需要添加以下字段。
- Access-Control-Allow-Origin 与简单请求一样,指请求页面源信息,*表示所有站点
- Access-Control-Allow-Methods 该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法
- Access-Control-Allow-Headers 如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的
- Access-Control-Allow-Credentials 是否发送凭证
- Access-Control-Max-Age 缓存多长时间(秒为单位)
response.setContentType("text/html; charset=utf-8");
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "*");
response.addHeader("Access-Control-Max-Age", "100");
response.addHeader("Access-Control-Allow-Headers", "X-Custom-Header,accept, content-type");
response.addHeader("Access-Control-Allow-Credentials", "false");
什么时候触发重绘重排
- 增加或删除DOM节点
- 移动页面中的元素
- 增加或者修改样式
- 设置
display: none;
(重排并重绘)或者visibility: hidden
(只有重排) - 用户改变窗口大小,滚动页面等
怎么减少重绘重排
- 不要一个一个地单独修改属性,最好通过一个classname来定义这些修改
- clone节点后大幅度修改它,最后插入节点。或者用DocumentFragment进行修改
- 不要频繁获取计算后的样式,最好暂存起来而不是直接从DOM上读取
- 绝对定位的动画不会影响其他dom