面试题:说一下 http 报文都有哪些东西?

时间:2024-06-07 21:19:08

面试题:说一下 http 报文都有哪些东西?

  • HTTP 是传输超文本(实际上除了 HTML,可以传输任何类型的文件,如视频、音频、文本等)的协议,是一组用于浏览器-服务器之间数据传输规则

  • HTTP 位于 OSI 七层模型的顶层(应用层),应用程序可以在其中交换数据。HTTP 是 TCP/ICP 协议族的一部分。

  • HTTPS 是另一种传输协议,这里的 S 表示安全(Secure)。其与 HTTP 的区别在于,消息在传递前会被加密

  • 浏览器和服务器之间通过 HTTP 报文进行通信。浏览器向服务器发送请求报文,服务器返回给浏览器响应报文。解释如下。

一. 请求报文

报文结构

请求报文(request)分为四部分:请求行(request line)、请求头(request headers)、空行(blank line)、请求体(request body)

  1. 请求行:任何一个 HTTP 请求的第一行都称之为请求行,包含三部分内容:请求方法(method)、请求路径(request url)、HTTP 版本(HTTP version)

    • 请求方法:表示浏览器请求对资源要进行的操作

      方法 作用
      GET 从服务器请求资源。由于传递的参数直接显示在地址栏中,而浏览器和服务器对 URL 长度有限制,因此 GET 请求不适合传递私密数据和大量数据
      POST 向服务器发送数据。将传递的数据封装在 HTTP 报文的请求体中,可以传输大量数据,同时不会显示在地址栏中。
      PUT 更新服务器中的资源。与 POST 类似,但是 PUT 请求指定了资源的存放位置,而 POST 则没有。
      DELETE 删除服务器中的资源
      HEAD 与 GET 相同,但是响应报文不包含响应体。通常用于获取元数据检查资源是否存在(验证 URL)检查资源自上次请求以来是否更改等场景。HEAD 请求因为省去了传输请求体的时间,因此在对应的场景下更加高效。
      OPTIONS 浏览器可以使用 OPTIONS 请求来查询服务器在特定资源上允许的 HTTP 方法(如 GET、POST、PUT、DELETE),此时服务端返回的响应报文中包含 Allow 请求头。发送 AJAX 跨域请求访问资源时,浏览器会发送一个 OPTIONS 请求,称之为预检请求,以确保服务器允许该跨域操作,此时服务端返回的响应报文中包含 Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-HeadersAccess-Control-Max-Age 请求头。
    • 请求路径:表示要请求的资源的 URL 地址。请求资源的目标地址需要包含:协议、域名或 IP 地址、端口号、请求路径、请求参数(可选)

    • HTTP 版本:当前正在使用的 HTTP 协议版本。常见版本为 HTTP/1.1 和 HTTP/2,默认使用 HTTP/2。

      • HTTP/1.1 使用纯文本格式进行数据传输;而 HTTP/2 使用二进制格式进行数据传输,提高了传输和解析的效率。
      • HTTP/1.1 和 HTTP/2 都是基于 TCP 协议;HTTP/1.1 存在队头阻塞问题,同一条 TCP 连接上,必须按顺序发送请求和处理响应;HTTP/2 消除了队头阻塞问题,允许在单个 TCP 连接上同时发送请求和处理响应,从而实现多路复用,提高了并发性。
      • HTTP/2 使用 HPACK 算法对头部进行压缩,从而减小头部大小,提高传输效率。
      • HTTP/2 支持服务端在客户端请求之前主动推送资源,减少延迟。
      • HTTP/2 支持请求的优先级和流量控制,优化了资源的传输顺序和带宽利用率。
  2. 请求头:请求行一结束紧接着就是请求头,提供本次请求的额外信息。可以通过请求头设置浏览器将接收的响应类型等信息。

    • 请求头**类似键值对(name: value)**的形式。值的取值和结构由请求头决定。

    • 请求头不分大小写

    • 每个请求头占据一行。

    常用请求头 作用
    User-Agent 发送请求的浏览器类型
    Accept 浏览器可识别的响应数据类型列表
    Accept-Language 浏览器可接受的自然语言
    Accept-Encoding 浏览器可接受的编码压缩格式
    Accept-Charset 浏览器可接受的编码字符集
    Host 接收请求的主机名
    Connection 浏览器和服务器的连接方式(close 或 keepalive)
    Cookie 存储于客户端的字段,通常向同一域名的服务端发送属于当前域名的 Cookie
    Content-Type 浏览器发送的请求体的数据类型
  3. 空行:请求头后边是一个空行,用于标识请求头部分的结束。

  4. 请求体可选的。一般来说,POST 和 PUT 请求的请求报文中才会包含请求体,其中包含要向服务器发送的数据(如表单输入或文件上传)。

服务器收到请求报文后,对其进行处理,然后向浏览器发送一个响应报文。与请求报文类似,响应报文包含响应行(可以用于标识请求是否成功等)、响应头(设置响应元信息)、空行和响应体(包含请求的资源或提示信息)。

二. 响应报文

报文结构

响应报文(response)也分为四部分:状态行(status line)、响应头(response headers)、空行(blank line)、响应体(response body)

  1. 状态行:任何一个 HTTP 响应的第一行都称之为状态行,包含三部分内容:HTTP 版本(HTTP version)、状态码(status code)、状态描述(status text)

    • HTTP 版本:当前正在使用的 HTTP 协议版本。

    • 状态码:表示请求状态的 3 位数字。其中第一个数字表示响应类别。

      状态码 状态描述 含义
      1 x x \bf{\Large{1xx}} 1xx 信息性状态码 表示请求已接收,继续处理。
      100 Continue 表示客户端应该继续请求或忽略此状态码。
      101 Switching Protocols 表示服务端正在根据客户端的请求切换协议。
      2 x x \bf{\Large{2xx}} 2xx 成功状态码 表示请求已接收、理解和处理。
      200 OK 表示请求成功,服务器已返回所请求的资源。
      201 Created 表示请求成功,并导致了一个新资源的创建。
      202 Accepted 表示请求已接收,但是尚未处理完成。
      204 No Content 表示请求成功,但没有内容返回。该状态码常用于 DELETE 操作。
      3 x x \bf{\Large{3xx}} 3xx 重定向状态码 表示需要客户端采取进一步操作。
      301 Moved Permanently 表示请求的资源已永久移动到新的位置,客户端需要使用新 URL 进行访问。
      302 Found 表示请求的资源临时搬到新的位置,客户端应继续使用原 URL 进行请求。
      303 See Other 表示请求的资源临时搬到新的位置,客户端应继续使用原 URL + GET 方法进行请求。
      304 Not Modified 表示资源未修改,可以使用缓存版本。客户端在请求文件时,如果发现存在的缓存文件中有 Last Modified 时间标识,则向浏览器发送请求时在请求头中包含 If-Modified-Since。如果客户端发现自从 Last Modified 对应资源未改变,则返回 304,表示可以使用缓存文件,否则返回 200。
      4 x x \bf{\Large{4xx}} 4xx 客户端错误状态码 表示客户端出现了错误。
      400 Bad Request 表示客户端请求存在语法错误
      401 Unauthorized 表示请求未授权。
      403 Forbidden 表示服务端拒绝请求。
      404 Not Found 表示请求的资源不存在。这可能是因为客户端输入了错误的 URL。
      405 Methods Not Allowed 表示请求方法对资源不适用。这可能是因为使用 GET 请求一个只能 POST 的资源。
      5 x x \bf{\Large{5xx}} 5xx 服务器错误状态码 表示服务器在处理请求时发生了内部错误。
      500 Internal Server Error 表示服务器内部错误,无法完成请求。
      501 Not Implemented 表示服务器不支持请求的方法。
      502 Bad Gateway 表示网关或代理服务器从上游服务器中接受到无效响应。
      503 Service Unavailable 表示服务器暂时过载或维护,无法处理请求。
      504 Gateway Timeout 表示网关或代理服务器未及时从上游服务器中接受到响应。
    • 状态描述:对状态码简短、可读的描述。

  2. 响应头:与请求头类似,提供本次响应的额外信息。

  3. 空行:与请求报文的空行类似,标识响应头的结束。

  4. 响应体:包含浏览器请求的资源(HTML、JSON、图片等)。

REFERENCES

https://medium.com/@adilrk/http-request-and-response-e7da8eb3a00c

https://juejin.cn/post/6931636106710482958