缓存
参考网页:https://segmentfault.com/a/1190000008956069
强缓存&协商缓存
强缓存:expires(绝对到期时间) cache-control(max-age相对时间)
如果文件没过期,不必向服务器发送数据,直接使用缓存;注意,后者优先级更高。
如果过期,浏览器携带关于缓存header字段信息比如Etag什么的发给服务器
协商缓存:
Etag/If-none-match 客户端发回header后,服务器比对Etag,不同就将If-none-match设置为true返回200,更新资源;否则返回304继续使用缓存
Last-Modify/If-Modified-Since 前者是服务器返回的header中的,表示该资源最后修改时间;后者是浏览器请求时header包含的,为上次缓存前的Last-Modify,这样服务器比对自身的Last-Modify和刚收到的浏览器发回来的If-Modified-Since的值,不同即不命中缓存,返回200,相同即命中缓存,返回304使用缓存就好。(也不会返回Last-Modify,毕竟没变嘛)
关于两种协商缓存为什么要同时存在?
1、有时仅仅修改文件时间但不改变内容,这样按照modify仍然不会命中缓存,故使用Etag相当于双保险;
2、修改过于频繁比如在秒级以下,这样modify无法判断;
3、服务器的文件修改时间不精确
服务器会优先验证Etag,一致才会继续比对Last-Modify。
XSS、CSRF攻击
参考网站:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/
跨站脚本攻击XSS
原理:插入script字符串使得提交地址指向黑客服务器,诱导用户点击提交数据
预防:
1 浏览器自身可以识别
2 http-only:cookie中设置该属性,js脚本无法获取cookie信息
3 过滤客户端提交的数据,特别是表单数据,如字符转义,使得script的括号不会被js引擎直接解析,如合法性验证等
跨站请求伪造CSRF
原理:点击黑客链接,链接获取用户的cookie,直接执行用户目标网站界面的操作(当然得同一浏览器标签页以及有cookie时间限制)
是拿不到看不到cookie数据的,只能利用数据。所以改变数据的服务需要进行CSRF保护。
防范:
1 验证http referer字段:记录了http请求来源地址。(CSRF攻击肯定是不一样的url地址)(缺点:有些内网并不想服务端存储访问地址)
2 请求地址添加随机token验证(用户登陆http请求时产生token存在session中,每次进行对比)
3 http头中自定义属性并验证(写在 XMLHttpRequest中)
css动画
transform 静态效果,变形
animation 立即运行,控制更精确
transition 变换,配合hover等事件触发
setTimeout Promise
前者在新的事件循环开始时进行,后者在本轮事件循环结束时执行。
####IE6常见bug
参考:http://www.frontopen.com/1130.html
双边距:float+margin时,margin数值自动翻倍。==》显式设置display
3像素问题:float相邻元素总有3px间距 ==》同一行元素都加上float
点击链接后失效:==》注意顺序link visited hover active
img文件下方间隙:设置display或者font-size:0
webpack gulp 区别
https://segmentfault.com/q/1010000008058766?_ea=1535003
gulp:task runner,跑一个个任务,比如SASS==》CSS,coffee==》js