http协议基础知识

HTTP 的发展历史:

HTTP(超文本传输协议)自其引入以来经历了多个版本的发展,每个版本针对特定的需求和问题进行了改进。以下是 HTTP 协议的发展历史,以及各个重大更新版本的特性和优点。

  1. HTTP/0.9 (1991):

    1. 特性: 最初版本,仅支持 GET 请求,只有简单的文本传输,且不支持 HTTP 头。
    2. 优点: 设计极其简单,适用于早期的 HTML 页面下载。
    3. 缺点: 功能有限,不支持 POST 请求,不具备复杂交互的能力。
  2. HTTP/1.0 (1996):

    • 特性:
      • 引入了请求方法(GET、POST、HEAD)。
      • 支持 HTTP 头,可以传递元数据(如内容类型、长度等)。
      • 支持状态码,让客户端根据不同的返回码了解请求的结果。
    • 优点: 提供了一定的状态指示和灵活性,但基本上还是无状态且每次请求需重新建立连接。
  3. HTTP/1.1 (1997):

    • 特性:
      • 持久连接:默认允许复用连接,减少建立新连接的开销。
      • 分块传输编码:允许将响应数据分块传输,适用于大数据传输。
      • 增加了更多的请求方法(如 PUT、DELETE)。
      • 允许使用缓存机制,提供更好的性能优化。
      • 支持虚拟主机,允许在同一 IP 上托管多个网站(Host 头)。
    • 优点: 与 HTTP/1.0 相比,减少了网络延迟,提高了性能,增加了灵活性并支持更复杂的应用。
  4. HTTP/2 (2015):

    • 特性:
      • 二进制协议:将文本格式转换为二进制,提高了解析性能。
      • 多路复用:允许在单个连接上并发多个请求和响应,避免了请求阻塞。
      • 服务器推送:服务器可以主动推送资源到客户端,减少延迟。
      • 头部压缩:使用 HPACK 算法压缩 HTTP 头,减少带宽占用。
    • 优点: 显著提高了网络传输的效率,减少延迟,改善了现有应用的性能,尤其适合需要高性能的 web 应用。
  5. HTTP/3 (正在发展中):

    • 特性:
      • 基于 QUIC 协议:QUIC 是由 Google 开发的一个传输层协议,可提供更快的连接和更优秀的安全性。
      • 更快的连接建立:通过 0-RTT 连接建立减少延迟。
      • 内建加密:HTTP/3 从一开始就整合了 TLS,提高传输安全性。
    • 优点: 提高了传输效率和安全性,尤其是在不稳定的网络条件下,改善了用户体验。

HTTP协议的工作流程:  

     一次HTTP操作称为一个事务,其工作整个过程如下:

        1 ) 地址解析

     如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm

     从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
     协议名:http
     主机名:localhost.com
     端口:8080
     对象路径:/index.htm

      在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

        2)封装HTTP请求数据包

     把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

        3)封装成TCP包,建立TCP连接(TCP的三次握手)

       在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口

        4)客户机发送请求命令

       建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。

        5)服务器响应

     服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

        实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

        6)服务器关闭TCP连接

     一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

    Connection:keep-alive

   TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP协议的信息交换都是通过报文进行的

报文可以分为请求报文(浏览器/客户端发送至服务器)和响应报文(服务器发送至浏览器/客户端)

下面以HTTP/1.1为例介绍请求报文的内容

HTTP请求报文

HTTP请求报文由请求行请求头空行请求实体四个部分组成

格式如下:

请求报文实例:

请求行

HTTP请求行包括以下几个部分:

        1.请求方法

        HTTP/1.1的请求方法有以下几个              

1GET从服务器获取资源。用于请求数据而不对数据进行更改。例如,从服务器获取网页、图片等。
2POST向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。
3PUT向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。
4DELETE从服务器删除指定的资源。请求中包含要删除的资源标识符。
5PATCH对资源进行部分修改。与 PUT 类似,但 PATCH 只更改部分数据而不是替换整个资源。
6HEAD类似于 GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。
7OPTIONS返回服务器支持的 HTTP 方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。
8TRACE回显服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。
9CONNECT建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。
          2.URL
  •  URL(Uniform Resource Locator 统一资源定位符)用于定位信息在服务器的位置
  • URL的构成:http://<host>:<port>/<path>?<searchpart>
  • 其中,host为服务器的主机名,port为服务器进行http服务的的端口,默认情况为80
  • path为请求的资源在服务器上的路径,searchpart为附加信息,port、path、searchpart部分是可选的
  • 示例:https://www.example.com/search?q=apple&type=fruit&page=1
         3.协议版本

         HTTP协议的版本常见的有HTTP/1.1,HTTP/2.0两种

请求头

由一系列的”key:value“组成,起到了传递额外信息的作用。http/1.1定义了47中请求头部字段,以下是常见的几种

  1. Host: 请求的服务器域名和端口号。
  2. User-Agent: 用户代理,包括客户端的基本信息。不同行浏览器有不同的 User-Agent,例如 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101。
  3. Accept: 指定浏览器能够接受的内容类型,比如 text/htmlapplication/xhtml+xmlapplication/xml 等。
  4. Accept-Encoding: 浏览器支持的内容编码,例如 gzip。
  5. Accept-Language: 浏览器可接受的语言,例 zh-CN、zh; q=0.7、en-US; q=0.7。
  6. Connection: 是否保持连接,HTTP/1.1 默认使用长连接。
  7. Cookie: HTTP 请求发送时,会把对应的 cookie 一起发送给服务器。
  8. Content-Length: 请求或响应体的长度(单位是字节)。
  9. Content-Type: 实体的 MIME 类型,通常是 text/html; charset=utf-8

请求实体

        客户端/浏览器要交由服务器处理的数据,可以是二进制数据,也可以是格式化的文本

HTTP应答报文

HTTP应答报文的格式与请求报文的格式几乎完全一致,就不过多介绍

格式如下:

状态行

        协议版本

        与请求报文相同

        状态码
状态码分类
1xx信息性状态码表示接收的请求正在处理
2xx成功状态码表示请求正常处理完毕
3xx重定向状态码需要后续操作才能完成这一请求
4xx客户端错误状态码表示请求包含语法错误或无法完成
5xx服务器错误状态码服务器在处理请求的过程中发生了错误

        原因短语

        用于对状态码做出解释的一些简短的单词或短语

        如

200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止

响应头

  • 描述服务器的基本信息,告知客户端如何处理报文数据。
  • 下面是常用头部的一部分。
  1. Allow: 指明服务器支持哪些请求方法,如GET、POST等。
  2. Content-Encoding: 文档的编码方式。只有在解码之后才可以得到Content-Type头指定的内容类型。
  3. Content-Length: 表示响应文档实体的长度(单位为字节)。
  4. Content-Type: 指明实体的MIME类型。
  5. Connection: 与请求报文相同,当处于长连接时,取值为keep-alive。
  6. Date: 当前的GMT时间,例如Tue, 05 Jul 2022 11:12:58 GMT。
  7. Expires: 告知浏览器该资源缓存多久时间,-1代表不进行缓存。
  8. Last-Modified: 文档的最后修改时间,如Sat, 02 Jul 2022 03:19:16 GMT。
  9. Location: 配合302状态码使用,用于重定向到一个新的地址。
  10. Server: 将服务器的类型告知浏览器,如nginx。该值由服务器自动设置。
  11. Set-Cookie: 设置和页面相关的Cookie。

响应实体

        实体存储着服务器响应的主要内容,如数据,HTML文档代码等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值