前端面试准备——计算机网络(二)

188 阅读6分钟

参考书籍:

  • 《网络是怎样连接的》 --[日]户根勤
  • 《图解TCP/IP》
  • 《图解HTTP》

参考面经:「2021」高频前端面试题汇总之计算机网络篇 - 掘金 (juejin.cn)

HTTP面经

1. 当在浏览器中输入 Google.com 并且按下回车之后发生了什么?

image.png

2. HTTP请求报文的是什么样的?

image.png

3. HTTP响应报文的是什么样的?

image.png

4. 常见的HTTP请求方法

image.png

image.png

image.png

image.png

image.png

image.png

5. 对keep-alive的理解

原先: image.png

改进:HTTP keep-alive image.png

6. 使用 Cookie 的状态管理
  • 为什么要用Cookie进行状态管理?
    • HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
    • 碰到登录这种情况的时候,每次进行新的跳转都要重新登录;
  • Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
    • 客户端发送请求后,服务器端生成Cookie,并通过响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie;
    • 客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去,服务器端通过比对Cookie值,就知道客户端的状态了; image.png

image.png

image.png

7. 获取部分内容的请求
  • 请求报文通过Range指定请求内容的范围;
  • 响应报文返回206字段,在响应头中表明范围;
  • 若无法返回部分内容,则返回完整文件以及200字段 image.png
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 image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png 附带条件的请求是指采用 GET方法的请求报文中包含 If-Match,If-Modified Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部。

状态码304并不是一种错误,而是告诉客户端有缓存,直接使用缓存中的数据

image.png

image.png

401表示发送的请求需要有通过 HTTP 认证(BASIC 认证、 DIGEST 认证)的认证信息。当浏览器初次接收 到 401 响应,会弹出认证用的对话窗口。

image.png

image.png

image.png

image.png

10.常见的数据转发程序
  • 代理
    • 能够利用缓存技术(稍后讲解)减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志;
    • 可分为缓存代理和透明代理

image.png

  • 网关:利用网关可以由 HTTP 请求转化为其他协议通信,如网关可以连接数据库,使用 SQL语句查询数据 image.png

  • 隧道:能够使用SSL等加密手段进行通信

image.png

11.浏览器缓存

image.png

image.png

12.常见的HTTP请求头和响应头

image.png

image.png

image.png

image.png

Cache-Control Cache-Control: private, max-age=0, no-cache

image.png

image.png

image.png

  • 客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接受缓存过的响应,于是,“中间”的缓存服务器必须把客户端请求转发给原服务器。
  • 如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对资源进行缓存。

image.png

Connection字段的两个作用

image.png

image.png

其它

image.png

image.png

image.png

image.png

image.png

请求头中的字段

q用于表示优先级 image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

If-xxx 条件请求

image.png

image.png

image.png

image.png

image.png

image.png

响应头中的字段

image.png

image.png

image.png

image.png

image.png

消息体首部字段

image.png

image.png

image.png

Content-Location: http://www.hackr.jp/index-ja.html

image.png

image.png

image.png

image.png

Cookie相关的字段

image.png

image.png

13.HTTPS协议
  • 解决HTTP问题1:通信使用明文可能会被窃听 image.png

  • 不验证通信方的身份就可能遭遇伪装

image.png

借助SSL数字证书判断 image.png

  • 无法证明报文完整性,可能已遭篡改

image.png

image.png

image.png

相互交换密钥的公开密钥加密技术

image.png (非对称加密)使用公钥加密,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。 image.png 问题:无法证明公钥本身就是货真价实的公钥,或许在公钥传输途中,真正的公钥已经被攻击者替换掉了。

解决方法:数字证书 image.png

HTTPS 的安全通信机制
  1. 客户端通过发送 Client Hello 报文开始 SSL通信。
  2. 服务器可进行 SSL通信时,会以 Server Hello 报文作为应答。
  3. 服务器发送 Certificate 报文。报文中包含公开密钥证书。
  4. 最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL握手协商部分结束。
  5. SSL第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该报文已用步骤 3 中的公开密钥进行加密。
  6. 客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。
  7. 客户端发送 Finished 报文。
  8. 服务器同样发送 Change Cipher Spec 报文。
  9. 服务器同样发送 Finished 报文。
  10. SSL连接 就算建立完成。从此处开始进行应用 层协议的通信,即发送 HTTP 请求。
  11. 应用层协议通信,即发送 HTTP 响应。
  12. 最后由客户端断开连接。断开连接时,发送 close_notify 报文。 image.png

image.png

HTTPS缺点
  • 加密通信会消耗更多的 CPU 及内存资源
  • 要进行 HTTPS 通信,证书是必不可少的。而使用的证书必须向认 证机构(CA)购买。
14. HTTP/1.1中对于用户身份信息的认证

image.png BASIC认证采用 Base64 编码方式,但这不是加密处理。不需要任何附加信息即可对其解码,被盗风险极高。

image.png

SSL客户端认证 image.png

Cookie状态管理 image.png

14. Ajax

Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML技 术)是一种有效利用 JavaScript 和 DOM(Document Object Model,文 档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手 段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输 的数据量会因此而减少,这一优点显而易见。

Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过 JavaScript 脚本 语言的调用就能和服务器进行 HTTP 通信。借由这种手段,就能从已 加载完毕的 Web 页面上发起请求,只更新局部页面。

而利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产 生。另外,Ajax 仍未解决 HTTP 协议本身存在的问题。 image.png

15.WebSocket

image.png

image.png

16.Web攻击
  • 主动攻击和被动攻击 image.png

image.png

  • XSS攻击(跨站脚本攻击)