计算机网络面试题—HTTP请求报文和响应报文是怎样的?

175 阅读5分钟

Author : Cyan_RA9
Source : 【卡码笔记】网站
Question : HTTP请求报文和响应报文是怎样的?

【简要回答】

HTTP请求报文

  • 概念:客户端以请求报文的形式向服务器发送请求,用于获取资源或提交数据。
  • 报文结构
    1. 请求行(Request Line):包含方法、请求目标 和 HTTP版本。
    2. 请求头(header line):包含客户端信息和请求参数。
    3. 空行(Empty Line):其作用是分隔请求头和请求体。
    4. 请求体(entity body):可选,通常用于POST请求。
  • 首部行(请求头)常用字段
    1. Host:目标服务器的主机名。
    2. User-Agent:客户端信息。
    3. Accept:客户端接受的媒体类型。

HTTP响应报文

  • 概念:服务器对客户端请求的响应,用于返回请求结果。
  • 报文结构
    1. 状态行:包含HTTP版本、状态码 和 状态短语。
    2. 响应头:包含服务器信息和响应参数。
    3. 空行(Empty Line):其作用是分隔响应头和响应体。
    4. 响应体:可选,包含服务器返回的数据。
  • 首部行(响应头)常用字段
    1. Content-Type:响应体的媒体类型。
    2. Content-Length:响应体的长度。
    3. Set-Cookie:服务器设置的Cookie。

【详细回答】

HTTP请求报文

  • 概念:HTTP请求报文是客户端向服务器发送的请求,用于获取资源或提交数据。根据请求方法的不同,请求报文的结构和内容会有所变化。
  • 报文结构
    1. 请求行(Request Line)
      ① 格式:<方法> <请求目标> <HTTP版本>
      ② 示例:GET /index.html HTTP/1.1
      ③ 作用:<方法>用于表示请求的类型(如GET, POST等);<请求目标>通常是请求资源的URL路径;<HTTP版本>如HTTP/1.1,不同版本的HTTP协议具有不同的特性。
    2. 请求头(Request Headers):请求头可包含多个字段,字段格式为:<字段名>: <字段值>(eg: Accept: text/html);请求头的作用是提供客户端信息和请求参数。
    3. 空行(Empty Line):其作用是分隔请求头和请求体。
    4. 请求体(Request Body):可选,通常用于 POST、PUT等请求类型。请求体包含了提交的数据(如提交的表单数据)。
  • 首部行(请求头)常用字段
    1. Host:目标服务器的主机名。
    2. User-Agent:客户端信息(如浏览器类型)。
    3. Accept:客户端接受的媒体类型(如 text/html)。
    4. Content-Type:请求体的媒体类型(如 application/json)。
    5. Content-Length:请求体的长度。
  • GET请求与POST请求的区别
    1. GET请求:请求体为空,数据直接通过URL传递。GET请求的特点有:①数据长度有限(受URL长度限制);②数据可见(包含在URL中),不安全;③适用于获取资源。
    2. POST请求:请求体包含数据,数据通过请求体(载荷)传递。POST请求的特点有:①数据长度理论上无限制;②数据不可见(封装在请求体中),相比GET请求更安全;③适用于提交数据(例如提交表单数据)。

HTTP响应报文

  • 概念:HTTP响应报文是服务器对客户端请求的响应,用于返回请求结果。根据请求资源的不同情况,HTTP响应包含的状态码也会有所变化。
  • 报文结构
    1. 状态行(Status Line)
      格式:<HTTP版本> <状态码> <状态短语>
      示例:HTTP/1.1 200 OK
      作用:<HTTP版本>如HTTP/2,不同版本的HTTP协议具有不同的特性;<状态码>表示请求的结果(如 200、404 等);<状态短语>则是对状态码的简要描述(如 OK、Not Found 等)。
    2. 响应头(Response Headers):响应头可包含多个字段,字段格式为:<字段名>: <字段值>(eg: Content-Type: text/html);请求头的作用是提供客户端信息和请求参数;响应头的作用是提供服务器信息和响应参数。
    3. 空行(Empty Line):其作用是分隔响应头和响应体。
    4. 响应体(Response Body):可选,包含服务器返回的数据,也可能没有返回,比如 304。
  • 首部行(响应头)常用字段
    1. Content-Type:响应体的媒体类型(如 text/html)。
    2. Content-Length:响应体的长度(如 1024字节)。
    3. Set-Cookie:服务器设置的Cookie。
    4. Cache-Control:缓存控制指令。
  • 常见状态码
    1. 200 OK:请求成功。
    2. 404 Not Found:请求的资源未找到。
    3. 500 Internal Server Error:服务器内部错误。

【知识拓展】

  • HTTP请求报文和HTTP响应报文的结构,如下图所示:
    request_response_messages.jpg
  • MIME类型
    • MIME是 HTTP 协议中数据类型。 MIME 的英文全称是"Multipurpose Internet Mail Extensions",指多功能 Internet邮件扩充服务。

    • MIME 类型的格式是 " 大类型 / 小类型 ",并与某一种文件的扩展名相对应。

    • 在响应包的 Content-Type响应头中 就有指定MIME类型。

    • 常见MIME类型,如下表所示:

      文件MIME 类型
      超文本标记语言文本.html, .htm eg: text/html
      普通文本.txt eg: text/plain
      RTF 文本.rtf eg: application/rtf
      GIF 图像.gif eg: image/gif
      JPEG 图像.jpeg, .jpg eg: image/jpeg
      au 声音文件.au eg: audio/basic
      MIDI 音乐文件.mid, .midi eg: audio/midi, audio/x-midi
      ReadAudio 音乐文件.ra, .ram eg: audio/x-pn-realaudio
      MPEG 文件.mpeg, .mpg eg: video/mpeg
      AVI 文件.avi eg: video/x-msvideo
      GZIP 文件.gz eg: application/x-gzip
      TAR 文件.tar eg: application/x-tar