该内容主要整理关于 HTTP模块 的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。
HTTP模块精选篇
- 1. HTTP 报文的组成部分
- 2. 常见状态码
- 3. 从输入URL到呈现页面过程
- 3.1 简洁
- 3.2 详细
- 4. TCP、UDP相关
- 5. HTTP2相关
- 6. https相关
- 7. WebSocket的实现和应用
- 8. Token、cookie、Session区别
- 9. 一个图片 url 访问后直接下载怎样实现
- 10. fetch 发送 2 次请求的原因
- 11. GET 和 POST 的区别
- 12. 301 和 302 的区别
- 13. DNS的作用、DNS解析的详细过程,DNS优化原理
- 14. 简单请求和复杂请求
- 15. Http请求中的keep-alive有了解吗
- 16. 管道机制的作用是什么
- 17. 什么情况下会触发 option 请求
- 18. GET 可以上传图片吗
- 19. CDN 的作用和原理
- 20. 强缓存命中发生了什么?
- 21. CORS跨域的原理
- 22. 在深圳的网页上输入百度,是怎么把这个请求发到北京的
- 23. 为什么使用多域名部署?
- 24. 页面10张img,http1是怎样的加载表现?怎样解决的?
- 25. 说一说SSO单点登录
- 26. 说一说OAuth
- 27. HTTP 中的 301、302、303、307、308 响应状态码
1. HTTP 报文的组成部分
请求报文
- 请求行 ( http 方法 + 页面地址 + http 协议 + 版本)
- 请求头( key + value 值)
- 空行(服务端通过空行来判断下一部分不再是请求头,而当做请求体来解析)
- 请求体(数据部分)
响应报文
- 状态行 + 响应头 + 空行 + 响应体
2. 常见状态码
状态码分类
1xx
:服务器收到请求2xx
:请求成功,如 2003xx
:重定向,如 3024xx
:客户端错误,如 4045xx
:服务端错误,如 500
常见状态码
200
:成功301
:永久重定向(配合location
,浏览器自动处理)302
:临时重定向(配合location
,浏览器自动处理)304
:资源未被修改400
: 请求语法错误401
: 未授权403
:没权限404
:资源未找到500
:服务器错误504
:网关超时
HTTP状态码
[待上传]
3. 从输入URL到呈现页面过程
3.1 简洁
- 浏览器的地址栏输入URL并按下回车;
DNS
解析:将域名解析成IP
地址;TCP
连接:TCP
三次握手;(三次握手的目的:为了防止已经失效的连接 请求报文段突然又传送到了服务器端,从而产生错误)- 发送
HTTP
请求; - 服务器处理请求并返回
HTTP
报文; - 浏览器解析渲染页面;
- 断开连接:
TCP
四次挥手
3.2 详细
HTTP请求示意图
浏览器中的HTTP请求从发起到结束一共经历了如下八个阶段:构建请求、查找缓存、准备IP和端口、等待TCP队列、建立TCP连接、发起HTTP请求、服务器处理请求、服务器返回请求和断开连接
-
用户输入url并回车
-
浏览器进程检查url,组装协议,构成完整的url
-
浏览器进程通过进程间通信(
IPC
)把url请求发送给网络进程 -
网络进程接收到url请求后检查本地缓存是否缓存了该请求资源,如果有则将该资源返回给浏览器进程
-
如果没有,网络进程向
web
服务器发起http
请求(网络请求),请求流程如下:- 进行
DNS
解析,获取服务器ip
地址,端口 - 利用ip地址和服务器建立
tcp
连接 - 构建请求头信息
- 发送请求头信息服务器响应后,网络进程接收响应头和响应信息,并解析响应内容
- 进行
-
网络进程解析响应流程:
- 检查状态码,如果是
301/302
,则需要重定向,从Location
自动中读取地址,重新进行第4步,如果是200
,则继续处理请求 200
响应处理:检查响应类型Content-Type
,如果是字节流类型,则将该请求提交给下载管理器,该导航流程结束,不再进行后续的渲染,如果是html
则通知浏览器进程准备渲染进程准备进行渲染
- 检查状态码,如果是
-
准备渲染进程
- 浏览器进程检查当前url是否和之前打开的渲染进程根域名是否相同,如果相同,则复用原来的进程,如果不同,则开启新的渲染进程
-
传输数据、更新状态
- 渲染进程准备好后,浏览器向渲染进程发起“提交文档”的消息,渲染进程接收到消息和网络进程建立传输数据的“管道”
- 渲染进程接收完数据后,向浏览器发送“确认提交”
- 浏览器进程接收到确认消息后更新浏览器界面状态:安全、地址栏url、前进后退的历史状态、更新web页面
4. TCP、UDP相关
- 4.1 UDP 和 TCP 有什么区别
- 4.2 TCP 为什么要三次握手
- 4.3 三次握手过程中可以携带数据吗
- 4.4 TCP 的四次挥手
- 4.5 TCP 和 UDP 的区别
- 4.6 HTTP 和 TCP 的不同
5. HTTP2相关
- 5.1 说一下 http2.0
- 5.2 HTTP2 和 HTTP1 有什么区别
- 5.3 http/2 为什么要做头部压缩,实现原理是什么?
- 5.4 http/2 的 Server Push 有什么优点
- 5.5 谈谈你对多路复用的理解
6. https相关
- 6.1 HTTPS 加的一层 SSL 在七层中哪个位置
- 6.2 https 协议的优点
- 6.3 https 协议的缺点
- 6.4 http 与 https 区别
- 6.5 https 传输的具体过程
- 6.6 HTTPS 的整体过程分为证书验证和数据传输阶段
- 6.7 介绍一下 https 的握手过程
- 6.8 为什么 https 数据传输使用对称加密
- 6.9 介绍下 https 中间人攻击的过程
- 6.10 HTTPS 握手过程中,客户端如何验证证书的合法性
- 6.11 问题
- 6.12 数字签名?它是什么
- 6.13 谈谈对数字证书的理解
- 6.14 为什么说数字证书就能对通信方的身份进行验证呢
- 6.15 请详细的说一下 HTTPS 它的加密传输过程,涉及到哪些算法呢?
- 6.16 描述一下 RSA 握手
- 6.17 ECDHE 握手和 RSA 握手又有什么区别呢
- 6.18 你知道 TSL1.3 版本吗?它较 TSL1.2 做了哪些改进呢?
- 6.19 介绍下 HTTPS 中间人攻击
- 6.20 http/https 协议总结
7. WebSocket的实现和应用
- 7.1 什么是 WebSocket
- 7.2 WebSocket 是什么样的协议,具体有什么优点
- 7.3 理解WebSocket协议的底层原理、与HTTP的区别
8. Token、cookie、Session区别
- 8.1 Cookie 和 session 的区别
- 8.2 cookie 和 token 都存放在 header 中,为什么不会劫持 token?
- 8.3 介绍下如何实现 token 加密
9. 一个图片 url 访问后直接下载怎样实现
10. fetch 发送 2 次请求的原因
11. GET 和 POST 的区别
12. 301 和 302 的区别
13. DNS的作用、DNS解析的详细过程,DNS优化原理
14. 简单请求和复杂请求
15. Http请求中的keep-alive有了解吗
16. 管道机制的作用是什么
17. 什么情况下会触发 option 请求
18. GET 可以上传图片吗
19. CDN 的作用和原理
- 如何捕获 CDN 上的 js 运行时导致的详细错误信息?
20. 强缓存命中发生了什么?
- 默认的强制缓存时间是多少?
21. CORS跨域的原理
- CORS的哪些是简单请求?
- CORS的预检请求具体是怎样的?
- 为什么简单请求不需要预检?
- 复杂请求预检检查什么东西?
- 如果CORS附带身份凭证要怎样做?
- 如何减少CORS预请求的次数?