跨域
跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制,防止他人恶意攻击网站
比如一个黑客,他利用iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名和密码登录时,如果没有同源限制,他的页面就可以通过 JavaScript读取到你的表单中输入的内容,这样用户名和密码就轻松到手了。
前端安全XSS,CSRF
xss 跨站脚本攻击。xss攻击的主要目的是想办法获取目标攻击网站的cookie, 因为有了cookie相当于有了session。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该网页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的,避免采取的措施:编码、过滤、校验
csrf 跨站点伪装请求,CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。防御手段:1. 尽量使用POST,限制GET,2. 加验证码
浏览器如何加载页面的,script脚本阻塞有什么解决办法,defer和async的区别是什么
从浏览器地址栏的请求链接开始,浏览器通过DNS解析查到域名映射的IP地址,成功之后浏览器端向此IP地址取得连接,成功连接之后,浏览器端将请求信息通过HTTP协议向此IP地址所在服务器发起请求,服务器接受到请求之后等待处理,最后向浏览器端发回响应,此时在HTTP协议下,浏览器从服务器接收到 text/html类型的代码,浏览器开始显示此html,并获取其中内嵌资源地址,然后浏览器再发起请求来获取这些资源,并在浏览器的html中显示
1 推迟加载(延迟加载)
如果页面初始的渲染并不依赖于js或者CSS可以用推迟加载,就是最后在加载js和css,把引用外部文件的代码写在最后
2 defer延迟加载<script src="" defer></script>
在文档解析完成开始执行,并且在DOMContentLoaded事件之前执行完成,会按照他们在文档出现的顺序去下载解析。效果和把script放在文档最后</body>
之前是一样的。
注:defer最好用在引用外部文件中使用,用了defer
不要使用document.write()
方法;使用defer时最好不要请求样式信息,因为样式表可能尚未加载,浏览器会禁止该脚本等待样式表加载完成,相当于样式表阻塞脚本执行
3 异步加载
async异步加载:就是告诉浏览器不必等到加载完外部文件,可以边渲染边下载,什么时候下载完成什么时候执行。<script type="text/javascript" src="a.js" async></script>
defer和async的区别:<script async src="example.js"></script>
有了async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行;<script defer src="example.js"></script>
有了defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的(异步),js脚本的执行需要等到文档所有元素解析完成之后,DOMContentLoaded
事件触发执行之前
浏览器强制缓存和协商缓存
强制缓存:是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间
协商缓存:就是由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问,这主要涉及到下面两组header字段,这两组搭档都是成对出现的,即第一次请求的响应头带上某个字段(Last-Modified或者Etag),则后续请求则会带上对应的请求字段(If-Modified-Since或者If-None-Match),若响应头没有Last-Modified或者Etag字段,则请求头也不会有对应的字段
浏览器的全局变量
有:alert,location,open(),setTimeout(),clearInterval()等
浏览器同一时间能够从一个域名下载多少个资源
一般是限制在10个以内
按需加载,不同页面的元素判断标准是怎么样的
访问的数据量过大的时候用缓存明显不太合适的时候。可以用按需加载
WEB存储,COOKIES,LOCALSTOGE等的使用规则和区别
web存储就指的是本地存储,包括localstorage和sessionstorage
Cookies:cookie在浏览器与服务器之间来回传递,cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭,cookie数据不能超过4k。
localStorage:localStorage不把数据发给服务器,仅在本地保存,始终有效,长期保存,可以达到5M或更大存储大小
浏览器内核
火狐浏览器:Mozilla Firefox ,内核是Gecko
opera浏览器:内核是blink
Safari浏览器:使用的是苹果公司自己的内核:webkit
一些国内的浏览器他们的内核
搜狗浏览器: 兼容模式(IE:Trident)和高速模式(webkit)
傲游浏览器: 兼容模式(IE:Trident)和高速模式(webkit)
QQ浏览器: 普通模式(IE:Trident)和极速模式(webkit)
360极速浏览器: 基于谷歌(Chromium)和IE内核
360安全浏览器: IE内核
预加载,懒加载
预加载:提前加载图片,当用户需要查看时可直接从本地缓存中渲染
懒加载:也就是延迟加载。当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),只有当图片出现在浏览器的可视区域内时,才设置图片真正的路径,让图片显示出来。这就是图片懒加载