前端面试题总结 HTTP\浏览器篇 (一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hukaihe/article/details/60478830

cookie和session的机制是什么?有什么区别?

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话,它可以弥补http协议无状态的不足。常用的会话跟踪技术是cookie与session。cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份。

cookie有什么作用?

cookie可以解决http的无状态的问题,与服务器进行交互,作为http规范存在。它具有极高的简便性、可扩展性和可用性,也可以通过加密和SSL技术来提高其安全性。因此推荐使用cookie作为标识而不是身份验证的工具。

cookie的缺点

(1) 大小和数目受限制。浏览器对一个域cookie的条目数有上限要求,且每个cookie的大小不得超过4kb。

(2)存在安全性问题,易被人拦截。

(3)需要指定域,不可以跨域

(4)浪费带宽,因为我每次请求一个新的页面,cookie都会被自动发送过去。

(5)有的移动端浏览器不支持cookie或浏览器禁用cookie

(6)有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

如何删除cookie

在服务器端,以java为例,可以将同名cookie的maxAge属性置0;在客户端,可以将expires属性设置为过去的一个时间。即:
document.cookie = ‘name=’+cookie_name+’;expires=’+ passed_date

什么是重排和重绘?什么时候会发生重绘?如何避免重绘?

重绘是指的屏幕的一部分要重新绘制,比如元素的背景色发生了改变,但几何尺寸未发生改变。重排意味着元素的几何尺寸发生了改变,需要重新计算生成渲染树。

下面几种情况会发生重排:

(1)resize窗口时

(2)修改网页默认字体时

(3)修改CSS样式改变尺寸时

(4)JS操作dom树

(5)一些影响布局的动画

(6)使用JS脚本获得一些布局属性时,比如offsetTop

相应的,可以采取以下方法来减少重排:

(1)不要一条条的修改DOM样式,改变className来“统一修改”(注:现代浏览器会进行增量异步reflow,即“攒够”一些修改后再统一修改)

(2)把dom离线修改,比如将其至于内存或设置display:none。

(3)为html动画原件使用position:absolute布局或fixed布局,这样不会引起重排和重绘。

(4)不要使用table布局,因为稍加改动就会导致table的重新布局。

(5)将offsetTop等属性缓存成局部变量。

浏览器是如何渲染页面的?

首先,浏览器会解析html\xhtml\svg,生成一个dom树,解析css文件生成css规则树,解析javascript以获得其对html和css的影响。解析完成后,浏览器会根据dom树和css规则树来生成渲染树。渲染树不包括像header元素这样页面中不会出现的元素。之后,会进行layout,定义元素的坐标。最后通过调用系统Native GUI的API绘制。

网页中如何优化图像

网页中优化图片的方式有:

(1)去掉没有意义的修饰

(2)使用CSS和矢量图代替位图

(3)惰性加载图片,使得图片可见后再进行加载

(4)使用CSS Sprites,将多张小图拼成一张大图

png和jpg格式的区别:

png属于无损压缩,而jpg则是有损压缩,这意味着一张图片多次使用jpg格式压缩的话会逐渐失真。png格式的图片存储空间明显大于jpg格式的图片

常见的Web攻击有哪些?

(1)跨站脚本攻击(XSS)

(2)分布式拒绝服务(DDOS)

基本方法是利用合理的请求占用服务器的大量资源,使正常用户无法得到服务器的相应。

(3)跨站请求伪造攻击(CSRF)

攻击者通过各种方法伪造一个请求,模仿用户提交表单的行为,从而达到修改用户的数据,或者执行特定任务的目的。解决方法是尽量使用post请求。

(4)sql注入

攻击主要针对后台使用sql拼接方式查询的情况,攻击者注入类似or 1 = 1的sql语句,致使表内的全部信息泄露。

post请求和get请求的区别

(1) get请求一般用来获得数据,而post请求一般用来发送数据。人们期望,get请求不会对服务器造成任何影响,而post请求则可能会影响服务器端的数据。get请求消耗的资源较post请求而言,会少一些,但相对安全性较差。发送同样大小的数据,get请求的效率最高可以达到post请求的2倍。

(2)一般按照约定,使用get请求时,将数据通过url进行传递,而是用post请求时,将数据放在body里。但这并非硬性规定,因为method和data本身是正交的。post请求亦可将数据放在url中。

(3)就协议底层实现而言,在get请求中,只产生一个TCP数据包,浏览器会将header和data一并发送出去,等待服务器的回应;而在post请求中,会产生2个TCP数据包。,浏览器先发送header,服务器响应100 continue,浏览器再发送data。

站内跳转和外部重定向有何区别

(1)直观而言,站内跳转不会改变url,而外部重定向会改变url。

(2)重定向可以跳转到web应用以外的页面,而站内跳转则不行。

(3)站内跳转可以通过request传递数据,而重定向不可传递数据。

猜你喜欢

转载自blog.csdn.net/Hukaihe/article/details/60478830