前端面试题之前端基础篇

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中,服务端可以在客户端某个请求后,主动推送其他资源。

HTTP2.0链接

 

9.400 401 403状态码分别表示什么含义

400    请求语法错误,请求无效

401    需要验证用户身份

403    服务器收到请求但拒绝执行

补充一点404  服务器找不到对应页面。

 

 

持续更新中。。。。