前端面试之前准备(Http相关面试题)

Http相关面试题

http常见的状态码有哪些

状态码分类

  • 1xx 服务器收到请求
  • 2xx 请求成功,如200
  • 3xx 重定向,如302
  • 4xx 客户端错误,如404
  • 5xx 服务端报错,如500

常见状态码

  • 200 成功
  • 301 永久重定向(配合location,浏览器自动处理)下次不会再访问老地址
  • 302 临时重定向(配合location, 浏览器自动处理) 还会访问老地址
  • 304 资源未被修改(缓存)
  • 404 资源未找到
  • 403 没有权限
  • 500 服务器错误
  • 504 网关超时

http常见的header有哪些

Header 名称 类别 作用 示例
Content-Type 请求 & 响应头 指定请求/响应的媒体类型(MIME 类型) application/json
Authorization 请求头 认证信息(如 Bearer Token、Basic Auth) Bearer <token>
Accept 请求头 客户端希望接收的数据类型 application/json
Accept-Encoding 请求头 浏览器可接收的压缩算法 gzip,zip
User-Agent 请求头 发送请求的客户端信息(浏览器、设备等) Mozilla/5.0
Referer 请求头 指示请求的来源页面 https://example.com
Origin 请求头 请求的源(主要用于 CORS) https://example.com
Host 请求头 目标服务器的主机名 api.example.com
Cookie 请求头 发送到服务器的 Cookie 数据 sessionId=abc123
Set-Cookie 响应头 服务器返回的 Cookie 设置 sessionId=abc123; HttpOnly
Cache-Control 请求 & 响应头 控制缓存策略 no-cache, max-age=3600
ETag 响应头 资源版本标识(用于缓存校验) "abc123"
If-None-Match 请求头 请求时携带的 ETag,避免重复获取资源 "abc123"
Content-Length 请求 & 响应头 请求/响应的内容长度(字节) 1024
Transfer-Encoding 响应头 指定数据传输编码方式(如分块传输) chunked
Connection 请求 & 响应头 控制连接是否保持(keep-alive 复用 TCP 连接) keep-alive
X-Forwarded-For 请求头 代理服务器转发的原始客户端 IP 192.168.1.1

什么是Restful API

Restful api是一种基于REST架构风格的web api设计规范,它通过http协议,使用资源 + 统一接口进行交互,旨在提供简洁、规范、可扩展的API设计

  1. 资源

    RESTful API 的核心是资源,每个资源用 URI(统一资源标识符) 进行唯一标识。例如:

  1. HTTP方法(动词)

    RESTful API 主要通过 HTTP 方法 对资源执行不同操作

HTTP 方法 作用 示例
GET 获取资源 GET /users/123 获取用户 123
POST 创建资源 POST /users 创建新用户
PUT 更新资源(整体) PUT /users/123 更新用户 123
PATCH 更新资源(部分) PATCH /users/123 仅更新部分信息
DELETE 删除资源 DELETE /users/123 删除用户 123

描述下http的缓存机制

什么是缓存?

二次打开页面的时候,不需要再重复请求一些静态资源

为什么需要缓存?

减少网络请求数量,页面加载更快,降低服务端压力,

哪些资源可以被缓存?

静态资源 js css img

HTTP缓存主要分为强制缓存和协商缓存,他们的区别在于是否需要向服务器发送请求来确认资源的有效性

强制缓存

  • 不会发送请求到服务器,直接从本地缓存中加载资源
  • 依赖Expires或Cache-Control`, 在response headers中返回,max-age 单位是秒
  • 若 max-age 和 Expires 都存在,Cache-Control 优先级更高。
Cache-Control: max-age=3600
Expires: Wed, 06 Mar 2025 12:00:00 GMT

cache-control的值:max-age(缓存时间), no-cache(不用本地缓存),no-store(不用服务端缓存), private, public

expires已经被cache-control代替

协商缓存

  • 需要向服务端发送请求(服务端缓存策略),如果资源未被修改,返回 304 Not Modified, 减少数据传输,否则返回200和最新的资源
  • 依赖Last-Modified / If-Modified-Since 或者 ETag / If-None-Match
    服务端响应(Response Headers)
  • 优先使用Etag,Last-Modified只能精确到秒级
  • 如果资源被重复生成,而内容不变,则Etag更精准
Last-Modified: Wed, 06 Mar 2024 12:00:00 GMT
ETag: "5d8c72a5-24dc"

浏览器请求(下次访问时),会把这些资源表示带上(Request Headers)

If-Modified-Since: Wed, 06 Mar 2024 12:00:00 GMT
If-None-Match: "5d8c72a5-24dc"

整体缓存的流程

用户请求资源 → 浏览器检查缓存是否有效
  |
  |--- 如果有效(强缓存):直接从缓存加载资源,结束
  |
  |--- 如果无效或缓存过期(协商缓存):
       |
       |--- 发送请求到服务器,并带上 `If-Modified-Since` 或 `If-None-Match`
       |
       |--- 服务器返回:
            |--- 如果资源未修改:返回 `304 Not Modified`,浏览器继续使用缓存
            |--- 如果资源修改了:返回 `200 OK`,并更新资源
  |
  结束

刷新操作

  • 正常操作:地址栏输入url,跳转链接,前进后退, 强制缓存有效,协商缓存有效
  • 手动刷新: F5, 点击刷新按钮,点击菜单刷新, 强制缓存失效,协商缓存有效
  • 强制刷新:ctrl + F5,强制缓存失效,协商缓存失效

https的加密方式以及过程解析

HTTPS是HTTP的安全版本,通过SSL/TLS协议对HTTP协议进行加密,确保数据传输的过程中的机密性,完整性和身份验证。HTTPS采用了对称加密非对称加密哈希算法三种加密方式

http和https的区别

  • http是明文传输,敏感信息容易被中间劫持
  • https=http+加密, 劫持了也无法解密
  • 现代浏览器已开始强制https协议

加密方式

对称加密

用同一个key进行加密和解密,这个key是服务端传递给客户端,它的加密速度比非对称加密要快很多,常用来数据传输过程中的加密,对称加密的安全性依赖于密钥的保密性。

非对称加密

一对key(公钥和私钥),公钥用来加密,私钥用于解密,只有拥有私钥的一方可以解密通过公钥加密的数据,常用来身份验证和密钥交互

哈希算法

哈希算法用于保证数据的完整性,它将输入数据转换成固定长度的哈希值(MD5、SHA-256)。哈希算法是单向的,无法反向计算原始数据,用来保证传输过程中数据没有被篡改

HTTPS加密过程解析

  1. 客户端发起请求
    • 客户端发起握手请求,向服务器发送一个clientHello消息,其中包含了浏览器支持的加密算法、生成的随机数等信息
  2. 服务器响应并且发送证书
    • 服务器的数字证书(服务器的公钥、证书颁发机构信息、证书的有效期)
    • 服务器选择的加密算法
    • 服务器生成的随机数
  3. 证书验证
    • 客户端验证证书,会使用自己的证书存储来验证服务器的数字证书是否合法,如果有效继续下面的步骤,如果无效告知用户证书不可信,是否继续访问
  4. 生成共享公钥
    • 客户端使用从服务器证书中提取到的公钥来加密一个预主密钥,将这个预主密钥发送到给服务器,只有服务器可以解密
    • 服务器使用自己的私钥解密客户端发送的预主密钥,获取预主密钥
  5. 对称加密密钥生成
    • 服务器和客户端根据预主密钥以及之前交互的随机数,利用对称加密算法(AES)来生成会话密钥,这个会话密钥用于后续的数据加密传输
  6. 完成握手
    • 双方确认握手完成,双方对称加密密钥生成后,会通过哈希算法计算出消息摘要,并且通过加密的方式互相发送确认消息,确保通信双方都拥有相同的会话密钥
    • 握手完成后,客户端和服务器开始使用会话密钥对后续的数据进行加密传输。

https证书

  1. 中间人攻击,可能会替换publicKey
  2. 使用第三方证书
  3. 浏览器校验证书

TCP的三次握手四次挥手是如何进行

TCP是一种面向连接的可靠的传输协议,通信双方通过三次握手建立连接,通过四次挥手关闭连接

  • 三次握手:用于 建立连接,确保双方都能发送和接收数据。

    • 客户端发送 SYN。
    • 服务器响应 SYN-ACK。
    • 客户端发送 ACK,连接建立。
  • 四次挥手:用于 关闭连接,确保双方都完成数据传输并正确关闭连接。

    • 客户端发送 FIN。
    • 服务器响应 ACK。
    • 服务器发送 FIN。
    • 客户端响应 ACK,连接关闭。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容