Skip to content

HTTP 协议:请求报文与响应报文 ​

HTTP协议概述 ​

  • 概述
    • hyper text transfer protocol : 超文本传输协议,
    • 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
    • 它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文。HTTP协议就是规定报文的格式。
  • 作用
    • 规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。
  • 组成
    • 由请求报文和响应报文两部分构成,请求是由客户端往服务器传输数据,响应是由服务器往客户端传输数据。
  • 发展历程
    • HTTP/0.9: 蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989 年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991 年被命名为 HTTP/0.9。
    • HTTP/1.0
      • 1996 年,HTTP/1.0 发布。该规范是显著扩大,并且支持三种请求方法:GET,Head,和POST。
      • HTTP/1.0 相对于 HTTP/0.9 的改进如下:
        • 每个请求都附加了 HTTP 版本。
        • 在响应开始时发送状态代码。
        • 请求和响应都包含 HTTP 报文头。
        • 内容类型能够传输 HTML 文件以外的文档。
      • 但是,HTTP/1.0 不是官方标准。
    • HTTP/1.1
      • HTTP 的第一个标准化版本 HTTP/1.1 ( RFC 2068 ) 于 1997 年初发布,支持七种请求方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,和TRACE
      • HTTP/1.1 是 HTTP 1.0 的增强:
        • 虚拟主机允许从单个 IP 地址提供多个域。
        • 持久连接和流水线连接允许 Web 浏览器通过单个持久连接发送多个请求。
        • 缓存支持节省了带宽并使响应速度更快。
      • HTTP/1.1 在接下来的 15 年左右将非常稳定。
      • 在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP 的安全版本。
    • HTTP/2
      • 由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。
      • 多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1 一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。
      • 二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。
      • 头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
      • 服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。
      • 改进的安全性:HTTP/2 默认使用 TLS(Transport Layer Security)加密传输数据,提高了安全性。
      • 兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1 共存,服务器可以同时支持 HTTP/1.1 和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。
    • HTTP/3
      • 于 2021 年 5 月 27 日发布 , HTTP/3 是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012 年开发的新协议 QUIC
      • HTTP/3 是继 HTTP/1.1 和 HTTP/2之后的第三次重大修订。
      • HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。
      • 目前,谷歌云、Cloudflare和Fastly支持 HTTP/3。Chrome、Firefox、Edge、Opera 和一些移动浏览器支持 HTTP/3。
  • 会话方式
    • image.png
    • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
  • HTTP1.0和HTTP1.1的区别
    • image.png
    • 在HTTP1.0版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在HTTP1.1版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。
  • 在浏览器中通过F12工具抓取请求响应报文包
    • 几乎所有的PC端浏览器都支持了F12开发者工具,只不过不同的浏览器工具显示的窗口有差异

HTTP请求报文 ​

  • 概述

    • image.png
    • 请求行
    • 请求头(可选)
    • 空行
    • 请求体
  • 请求行

    内容说明
    GET请求的方式。
    url请求的路径。
    HTTP/1.1使用的协议,及协议的版本。
  • 请求头

    内容说明
    Accept告知服务器,客户浏览器所支持的MIME类型。
    Accept-Encoding告知服务器,客户浏览器所支持的压缩编码格式。最常用的就是gzip压缩。
    Accept-Language告知服务器,客户浏览器所支持的语言。一般都是zh_CN或en_US等。
    Referer告知服务器,当前请求的来源。 只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。 作用:1 投放广告 2 防盗链
    Content-Type告知服务器,请求正文的MIME类型。
    Content-Length告知服务器,请求正文的长度。
    User-Agent浏览器相关信息
    Connection: Keep-Alive连接的状态:保持连接
    If-Modified-Since告知服务器,客户浏览器缓存文件的最后修改时间。
    Cookie会话管理相关,非常的重要。
  • 请求正文----->格式是键值对

    • get请求的请求参数在请求路径后面
    • post请求的请求参数在请求正文中

HTTP请求方式 ​

  • 请求方式

    请求方式说明
    GET从服务器获取数据(查询)
    POST将数据保存到服务器
    PUT命令服务器对数据执行更新
    DELETE命令服务器删除数据
    • HEAD、CONNECT、OPTIONS、TRACE
  • GET和POST

    GETPOST
    没有请求体有请求体
    请求参数附着在URL地址后面,存在安全隐患请求参数放在请求体中,比较安全
    在URL地址后面携带请求参数,数据容量非常有限。如果数据量大,那么超出容量的数据会丢失请求体发送数据的大小没有限制
    发送String类型的数据可以发送各种不同类型的数据

HTTP响应报文 ​

  • 概述

    • image.png
    • 响应行
    • 若干响应头(可选)
    • 空行
    • 响应体(可选)
  • 响应行

    内容说明
    200响应状态码
  • 响应头

    消息头说明
    Location请求重定向的地址,与302配合使用
    Content-Type告知浏览器,响应正文的MIME类型
    Content-Length告知浏览器,响应正文的长度。
    Content-Encoding告知浏览器,响应正文的压缩格式。gzip压缩。
    Content-Language告知浏览器,响应正文的语言
    Content-Disposition告知浏览器,以下载的方式打开响应正文
    Refresh定时刷新
    Last-Modified服务器资源的最后修改时间
    Set-Cookie会话管理相关,非常的重要
    Expires:-1服务器资源到客户浏览器后的缓存时间
    Catch-Control: no-catch不要缓存,http1.1
    Pragma:no-catch不要缓存,http1.0
  • 响应体

    • 由服务端发送给浏览器的正文数据,用于在页面上解析显示

HTTP响应状态码 ​

  • 概述
    • 200 : 请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
    • 302 : 重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
    • 304 : 请求资源未发生变化,使用了本地缓存
    • 404 : 请求的资源没有找到,说明客户端错误的请求了不存在的资源;
    • 405 : 请求的方式不允许
    • 500 : 请求资源找到了,但服务器内部出现了错误;