HTTP、浏览器面试题
一、http和https的区别?
①HTTP是未加密的,明文的。https是http和ssl协议构建的加密的协议。
②https需要ca证书,费用较高。
③连接的端口不同 http是80端口号,https是443端口号。
④HTTP的连接时无状态的,gttps较安全。
二、三次握手?
①为什么要进行三次握手?
因为要使得双方都可以进行收发。
第一次握手:C端向S端发送连接请求。
第二次握手:S端确认收到C端发来的报文。
第三次握手:C端确认S端收到了自己的报文,并且确定自己可以收到S端的报文。
三、UDP和TCP的区别?
①TCP面向连接,提供可靠连接,面向字节流,只支持1对1连接
②UDP不面向连接,提供不可靠连接,面向保温,支持1对多,1对1。
四、HTTP请求的HAED方式?
类似与get,但是不同的时HEAD不返回具体的内容,只返回请求头。
五、BOM对象?
BOM:浏览器对象 location对象 、history对象、navigator对象
location对象:
①location.href() 返回或设置当前文档的URL
②location.hash() 返回URL#之后的内容
history对象:
①history.go(num) 前进或后退页数
②history.back() 后退一页
③history.foword() 前进一页
navigator对象:
①navigator.userAgent -- 返回用户代理头的字符串表示(就是包括浏览器版本信息等的字符串)
②navigator.cookieEnabled -- 返回浏览器是否支持(启用)cookie
六、http状态码
①1** 信息
100:继续访问
②2** 成功
200:请求成功
201:已创建资源。
202:已接受,但还没有处理
③3** 重定向
301URL已转移
④4** 客户端错误
401:请求语法错误
402:没有权限
403:禁止访问
404:找不到页面
⑤5** 服务器端错误
500:服务器内部错误
503:超载或在维修
七、cookie、localStorage、sessionStorage的区别?
相同:都是存储在浏览器端
①存储大小不同
cookie是4KB,session和local是5MB。
②生命周期不同
cookie可设置过期时间,如果不设置就是页面级的。local是长期存储,除非手动删除。session是页面级存储,关闭页面则消失。
③请求参数不同
cookie每次都会带http头,其他二者不需要
④实用性
cookie没有自己的api需要开发人员自己进行封装 getCookie、setCookie。其他二者都有自己的api,setItem()、getItem()
八、Doctype的作用?
告诉浏览器应该用何种模式来解析文档。
有严格模式,混杂模式。
严格模式:W3C的标准模式。 混杂模式:浏览器自己的模式。
九、addEventListener参数
addEventListener(event,function,useCopture)
event:事件 function:触发时执行的函数 useCopture:true为事件冒泡,false为事件捕获
十、HTTP的缓存机制?
①根据HTTP响应报文的缓存标识符进行缓存 有强制缓存和协商缓存。
强制缓存:浏览器缓存中存在缓存结果和标识符。
协商缓存:强制缓存失效之后再向服务端发送请求的过程。返回304表示资源没有更新。返回200表示资源已更新。
②强制缓存的字段expires和cache-Control 协商缓存字段:last-Modified/If-Modified-Since Etag/If-None-Match
总结:强制缓存是优于协商缓存的,若强制缓存生效则直接用缓存,若失效则进行协商缓存。
协商缓存由服务器端决定是否使用缓存。304继续使用缓存。200重新获取缓存。
十一、POST和GET的区别?
①get的信息是在url中的,所以不安全,并且有长度限制。
②post的信息实在请求体内的,所以较安全,没有长度限制
十二、在输入URL之后,页面会发生什么?
①过程:输入url→查看缓存(浏览器缓存、系统缓存、路由器缓存。若有缓存直接显示页面内容)→DNS服务器(解析出IP地址)→发起HTTP请求(TCP连接)→服务端进行响应→绘制页面
②详细过程:输入URL后,浏览器先查看缓存,若有缓存则直接显示页面内容。如果没有缓存则查询DNS服务器找到IP地址。然后浏览器向服务端发起HTTP请求、tcp连接。服务端返回请求结果。
根据返回的结果解析文档,先解析HTML文档构建DOM树,遇到<link><style>标签构建CSSOM树,最后在结合DOM树和CSSSOM树生成Render渲染树。若在解析过程中遇到js文件就会停止DOM树的构建,直到js文件加载并解析完成后再继续DOM树的构建。因为js会改变DOM结构。
③重绘和回流:js代码可以修改和访问dom节点和css,所以再解析js的过程中会导致页面的重新布局和渲染。