发现很多有关http、浏览器相关的面试题,都很零散,所以就抽时间专门整理出了一套,可能不太完整,会慢慢完善
https
https是在http与tcp之间增添了一个加密/身份验证层(SSL)
http与https区别
http是明文传输信息,而https则是具有安全性的SSL加密传输,比http更安全;
http和https连接方式不同,端口也不一样,http是80,https是443;
http无状态协议是什么?怎么解决
无状态协议是对于事务处理没有记忆能力,
使用Cookie来解决无状态
常用的HTTP方法
GET、POST;
PUT: 传输文件;
DELETE:删除文件;
OPTIONS:查询相应URI支持的HTTP方法;
完整HTTP请求所经历的7个步骤
建立TCP连接;
浏览器向服务器发送请求行;
浏览器发送请求头;
服务器应答;
服务器发送应答头;
服务器向浏览器发送数据;
服务器关闭TCP连接;
http的keep-alive
TCP连接在发送后将仍然保持打开状态,浏览器可以继续通过相同的连接发送请求,节省了建立连接所需时间和网络带宽
Ajax请求过程
创建XMLHttpRequest对象;
设置回调函数;
与服务器建立链接,open();
向服务器发送数据,send();
在回调函数中判断响应状态并处理数据;
常见HTTP状态码
200:请求成功;
301:永久性重定向;
302:临时重定向;
403:请求的对应资源禁止被访问;
404:服务器无法找到对应资源;
500:服务器内部错误;
503:服务器正忙;
网页从输入网址到加载完成的过程
浏览器输入url;
域名解析(DNS解析),解析获取相应IP地址;
浏览器向服务器发起并建立tcp连接;
浏览器向服务器发送http请求;
服务器接收请求,将数据发送浏览器;
浏览器获取文件,解析html源码;
生成DOM树,解析css样式,js交互,完成渲染;
浏览器同源策略
同源策略是指"协议+域名+端口"三者相同,
分为两种,DOM 同源策略,XMLHttpRequest 同源策略
跨域方式
通过jsonp跨域;
document.domain + iframe跨域;
location.hash + iframe;
window.name + iframe跨域;
postMessage跨域;
nginx代理跨域;
nodejs中间件代理跨域;
WebSocket协议跨域;
网站性能优化
减少HTTP请求;
利用浏览器缓存;
减少DOM操作;
首屏加载和按需加载;
减少浏览器重排和重绘;
s和css文件合并压缩;
CSS资源放顶部,JS资源放底部;
图片使用png格式;
虚拟DOM
用js实现DOM树,用diff算法对每一层比较,找出最小变更,然后改变实际DOM,达到性能优化的方案
浏览器重排和重绘
重排是DOM元素的几何变化,DOM树结构变化,渲染树需要重新计算。
重绘是当页面中的元素样式的改变并不影响它在文档流中的位置,比如改变背景,颜色,字体等等,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
常见浏览器内核
IE浏览器:Trident内核;
Chrome浏览器:早期Webkit内核,现为Blink内核;
Firefox浏览器:Gecko内核;
Safari浏览器:Webkit内核;
360浏览器:Trident + Webkit双内核;
QQ浏览器:Trident + Webkit双内核;
常见兼容性问题
不同浏览器的默认margin、padding不同
解决方案:css里增加通配符*{margin:0;padding:0}
事件绑定不同
IE浏览器: dom.attachEvent();
其他浏览器:dom.addEventListener();
Ajax略有不同
IE浏览器:ActiveXObject对象;
其他:XMLHttpReuest对象;