前端面试题之前端基础篇
1.说一下http和https
http是目前应用最广泛的网络协议。http的ssl加密是在传输层实现的。
区别:
http是超文本传输协议,明文传输数据。https则是具有安全性的ssl加密传输协议。
http端口80,https端口443
https需要ca证书,费用较高,https网站在搜索引擎中的排名更高。
https比http更加安全。
https协议的工作原理:
客户端向服务器端发送请求,要求建立ssl连接。
服务器端将数字证书(数字证书中包含了公钥)返回给客户端
客户端和服务器端协商ssl链接安全等级
客户端根据安全等级使用公钥加密会话**
服务器端使用公钥解密会话**
服务器端使用会话**加密与客户端之间的通信。
2.tcp三次握手,一句话概括
客户端和服务端建立连接之前需要发送三个数据包
我觉得三次握手是客户端和服务器端通信的基础,不应该只满足于掌握这一句话。
三次握手
第一次握手:客户端发送一个SYN包,此时客户端处于SYN_SEND状态。
第二次握手:服务器端接收到了发来的SYN包,并发送SYN包加ACK包给客户端,此时服务器端处于SYN_REVD状态。
第三次握手:客户端接收到服务器端发送来的包,并返回一个ACK确认包给服务器端,此时客户端处于established状态
服务器端也接收到了客户端返回的ACK确认包,此时服务器端也处于esdablished状态。
四次挥手
第一次挥手:客户端发送一个FIN包,此时客户端处于FIN_WAIT1状态。
第二次挥手:服务器端发送一个ACK包,此时服务器端处于CLOSE_WAIT状态
第三次挥手:服务器端发送FIN包,此时服务器端处于LAST_ACK状态
第四次挥手:客户端接收到FIN包,并返回ACK确认包给服务器端。此时客户端处于TIME_WAIT状态。
服务器端接收到FIN包,进入CLOSED状态
这里特别需要主要的就是TIME_WAIT这个状态了,这个是面试的高频考点,就是要理解,为什么客户端发送 ACK 之后不直接关闭,而是要等一阵子才关闭。这其中的原因就是,要确保服务器是否已经收到了我们的 ACK 报文,如果没有收到的话,服务器会重新发 FIN 报文给客户端,客户端再次收到 ACK 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文。
3.TCP和UDP的区别
区别
TCP基于连接,UDP不基于连接
TCP只能1对1,UDP支持1对1和1对多
TCP面向字节流,UDP面向数据报
TCP报文首部较大为20字节,UDP为8字节
TCP可靠 UDP不可靠
为什么TCP可靠?
TCP报文格式中的SYN部分确保了数据传输的有序性、ACK部分确保了数据传输不会丢包、窗口部分确保数据传输过程中的流量控制。那么既然说到了TCP的报文格式,就顺便提一嘴TCP的报文格式。
TCP的报文格式
源端口:数据传输源头的端口号 目标端口:数据传输目标的端口号
SYN:数据传输数据部分第一个字节的序号
ACK部分:确认下一个数据包的数据部分的***
数据偏移:数据部分在数据包中的偏移量 保留位:为将来的功能位预留的位置
URG:紧急指针位,此位为1时紧急指针才能生效 ACK 此位为1时,ACK位才有效
PUSH 此位为1时数据包将不进入缓存区,优先处理 RST 重置指针 释放连接,重新建立连接
同步SYN 此位为1时,请求连接标志位 FIN包 释放连接标志位
窗口 用于流量控制
检验和 在客户端计算,在服务器端检验数据的合法性 紧急指针 在本报文段中紧急数据占多少字节
4、WebSocket的实现和应用
WebSocket也是基于HTTP协议的,或者说是借用了http协议完成了部分握手。
既然说到WebSocket,那就要谈谈为什么要使用Websocket。
答案很简单,http的缺陷:通信只能由客户端发起。
实现:在请求中加入 upgrade:websocket connection:upgrade
应用:需要实时更新数据的应用(天气数据),高并发应用(聊天软件)等
5.说一下web quality
web quality是指网页为特殊人士使用的易用性。
使用alt属性、使用可以调节大小的字体、语音浏览器等
6.几个很实用的BOM对象属性和方法
BOM BrowserObjectModel 浏览器对象模型
location对象 history对象
location.url 返回url地址
location.search 返回url中的查询字符串部分
location.hash 返回url中#后面的部分如没有#返回空
location.host 返回域名部分
location.hostname 返回主域名部分
history.go(num) 前进或者后退指定页面数
history.foward() 前进1页
history.back() 后退一页
7.说一下html5的drag api
在html标签元素上加上dragable="true"时,可以将标签变为拖拽元素。
8.说一下HTTP2.0
HTTP2.0经过查阅博客后总结出来的几个新特性
新的二进制格式 http2.0会将消息分为更小的信息和帧,并用二进制编码
多路复用 http1.0一个请求对应着一个连接,http2.0一个连接可以有多个请求
首部压缩 使用了http2.0的头部压缩算法(HPACK),减小了header的大小
服务器端推送 在HTTP2.0中,服务端可以在客户端某个请求后,主动推送其他资源。
9.400 401 403状态码分别表示什么含义
400 请求语法错误,请求无效
401 需要验证用户身份
403 服务器收到请求但拒绝执行
补充一点404 服务器找不到对应页面。
持续更新中。。。。