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

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

码农世界 2024-06-04 前端 95 次浏览 0个评论

面试题:说一下 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-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers、Access-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 支持请求的优先级和流量控制,优化了资源的传输顺序和带宽利用率。
        • 请求头:请求行一结束紧接着就是请求头,提供本次请求的额外信息。可以通过请求头设置浏览器将接收的响应类型等信息。

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

          • 请求头不分大小写。

          • 每个请求头占据一行。

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

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

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

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

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

    REFERENCES

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

    https://juejin.cn/post/6931636106710482958

转载请注明来自码农世界,本文标题:《面试题:说一下 http 报文都有哪些东西?》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,95人围观)参与讨论

还没有评论,来说两句吧...

Top