参考书籍:
- 《网络是怎样连接的》 --[日]户根勤
- 《图解TCP/IP》
- 《图解HTTP》
参考面经:「2021」高频前端面试题汇总之计算机网络篇 - 掘金 (juejin.cn)
HTTP面经
1. 当在浏览器中输入 Google.com 并且按下回车之后发生了什么?
2. HTTP请求报文的是什么样的?
3. HTTP响应报文的是什么样的?
4. 常见的HTTP请求方法
5. 对keep-alive的理解
原先:
改进:HTTP keep-alive
6. 使用 Cookie 的状态管理
- 为什么要用Cookie进行状态管理?
- HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
- 碰到登录这种情况的时候,每次进行新的跳转都要重新登录;
- Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
- 客户端发送请求后,服务器端生成Cookie,并通过响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie;
- 客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去,服务器端通过比对Cookie值,就知道客户端的状态了;
7. 获取部分内容的请求
- 请求报文通过Range指定请求内容的范围;
- 响应报文返回206字段,在响应头中表明范围;
- 若无法返回部分内容,则返回完整文件以及200字段
8. 内容协商返回最合适的内容
如网站有中英文两个版本,根据情况显示对应的网页版本;
- 内容协商技术
- 服务器驱动协商(Server-driven Negotiation)
- 客户端驱动协商(Agent-driven Negotiation)
- 透明协商(Transparent Negotiation)
- 判断标准(请求头)
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
9.HTTP状态码
常见状态码:200,204,206;301,302,303,304;400,401,403,404;500,503
附带条件的请求是指采用 GET方法的请求报文中包含
If-Match,If-Modified Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。
状态码304并不是一种错误,而是告诉客户端有缓存,直接使用缓存中的数据。
401表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。当浏览器初次接收 到 401 响应,会弹出认证用的对话窗口。
10.常见的数据转发程序
- 代理
- 能够利用缓存技术(稍后讲解)减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志;
- 可分为缓存代理和透明代理
-
网关:利用网关可以由 HTTP 请求转化为其他协议通信,如网关可以连接数据库,使用 SQL语句查询数据
-
隧道:能够使用SSL等加密手段进行通信
11.浏览器缓存
12.常见的HTTP请求头和响应头
Cache-Control Cache-Control: private, max-age=0, no-cache
- 客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接受缓存过的响应,于是,“中间”的缓存服务器必须把客户端请求转发给原服务器。
- 如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对资源进行缓存。
Connection字段的两个作用
其它
请求头中的字段
q用于表示优先级
If-xxx 条件请求
响应头中的字段
消息体首部字段
Content-Location: http://www.hackr.jp/index-ja.html
Cookie相关的字段
13.HTTPS协议
-
解决HTTP问题1:通信使用明文可能会被窃听
-
不验证通信方的身份就可能遭遇伪装
借助SSL数字证书判断
- 无法证明报文完整性,可能已遭篡改
相互交换密钥的公开密钥加密技术
(非对称加密)使用公钥加密,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。
问题:无法证明公钥本身就是货真价实的公钥,或许在公钥传输途中,真正的公钥已经被攻击者替换掉了。
解决方法:数字证书
HTTPS 的安全通信机制
- 客户端通过发送 Client Hello 报文开始 SSL通信。
- 服务器可进行 SSL通信时,会以 Server Hello 报文作为应答。
- 服务器发送 Certificate 报文。报文中包含公开密钥证书。
- 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL握手协商部分结束。
- SSL第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
- 客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
- 客户端发送 Finished 报文。
- 服务器同样发送 Change Cipher Spec 报文。
- 服务器同样发送 Finished 报文。
- SSL连接 就算建立完成。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。
- 应用层协议通信,即发送 HTTP 响应。
- 最后由客户端断开连接。断开连接时,发送 close_notify 报文。
HTTPS缺点
- 加密通信会消耗更多的 CPU 及内存资源
- 要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认 证机构(CA)购买。
14. HTTP/1.1中对于用户身份信息的认证
BASIC认证采用 Base64 编码方式,但这不是加密处理。不需要任何附加信息即可对其解码,被盗风险极高。
SSL客户端认证
Cookie状态管理
14. Ajax
Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML技 术)是一种有效利用 JavaScript 和 DOM(Document Object Model,文 档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手 段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输 的数据量会因此而减少,这一优点显而易见。
Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过 JavaScript 脚本 语言的调用就能和服务器进行 HTTP 通信。借由这种手段,就能从已 加载完毕的 Web 页面上发起请求,只更新局部页面。
而利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产 生。另外,Ajax 仍未解决 HTTP 协议本身存在的问题。
15.WebSocket
16.Web攻击
- 主动攻击和被动攻击
- XSS攻击(跨站脚本攻击)