计算机网络应用层协议:HTTP

1.进程通信

在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信。
进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。
由于套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用程序编程接口。
进程寻址,即表示接收进程需要定义两种信息:①主机的地址②在目的主机中指定接收进程(更具体的说,接收套接字)的标识符。

2.应用层协议

应用层协议定义了运行在不同端系统上的应用程序如何相互传递报文。

  • 交换的报文类型。例如请求报文和响应报文。
  • 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
  • 字段的语义,即这些字段中的信息的含义。
  • 确定一个进程何时以及如何发送报文,对报文进行响应的规则。

3.HTTP

3.1 HTTP概况

Web的应用层协议是超文本传输协议HTTP。
HTTP使用TCP作为它的支撑运输协议。
客户端的套接字接口是客户进程与TCP连接之间的门。
HTTP是一个无状态协议,不保存关于客户的任何信息。

3.2 非持续连接和持续连接

3.2.0 RTT往返时间

该时间是指一个短分组从客户到服务器然后再返回客户所花费的时间。
RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。

在这里插入图片描述
如图,三次握手的前两次占用了一个RTT。总的响应时间就是两个RTT加上服务器传输文件的时间。

3.2.1 非持续连接

每个请求/响应对是经一个单独的TCP连接发送。
每个TCP连接在服务器发送一个对象后关闭。每个TCP连接只传输一个请求报文和一个响应报文。

缺点

1.给服务器带来严重的负担。必须为每一个请求的对象建立和维护一个全新的连接。对于每个连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量。
2.每一个对象经受两倍RTT的交付时延。

3.2.2 持续连接(默认)

所有的请求及响应经相同的TCP连接发送。
在采用HTTP1.1持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。
一般来说,如果一条连接经过一定时间间隔(一个可配置的时间间隔)仍未被使用,HTTP服务器就关闭该连接。

3.3 HTTP报文格式

3.3.1 请求报文

方法字段有:GET POST PUT DELETE
GET方法实体体为空。
HEAD方法类似于GET方法。当服务器接收到一个使用HEAD方法的请求时,将会用一个HTTP报文进行响应,但是并不返回请求对象。
在这里插入图片描述
在这里插入图片描述

3.3.2 响应报文

在这里插入图片描述
在这里插入图片描述
Date:首部行指示服务器产生并发送该响应报文的日期和时间。
(服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间)
Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。
Content-Length:被发送对象中的字节数。
Content-Type:指示实体体中的对象类型。

3.4 cookie

cookie可以在无状态的HTTP之上建立一个用户会话层。
在这里插入图片描述

如图。cookie技术有四个组件:
1.在HTTP响应报文中有一个cookie首部行
2.在HTTP请求报文中的一个cookie首部行
3.在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
4.位于Web站点的后端数据库

3.5 Web缓存

Web缓存器也叫代理服务器。
它能代替初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在存储空间中保存 最近请求过的对象的副本。
在这里插入图片描述

优点

1.大大减少对客户端请求的响应时间
2.能够大大减少一个机构的接入链路到因特网的通信量,通过减少通信量,就不必急于增加带宽,降低费用。
3.能从整体上大大减低因特网上的Web流量,改善了所有应用的性能。

条件GET方法

GET请求中包含If-Modified-Since首部行。
缓存器发送条件GET报文告诉服务器,仅当自指定日期之后该对象被修改过,才发送该对象。
如果没有修改过,响应报文不会包含所请求的对象。状态行为304 Not Modified,它告诉缓存器可以使用该对象,能向请求的浏览器转发它(该代理缓存器)缓存的对象副本。

4.HTTP的不同版本

4.1 HTTP1.1

默认使用长连接,解决了TCP复用问题,减少了TCP三次握手的开销。

4.2 HTTP2.0

1.采用二进制而非文本格式
2.采用多路复用,而非有序并阻塞的,只需一个连接即可实现并行,多路复用允许单一的 HTTP/2 连接同时发起多重的请求-响应消息
3.首部压缩,使用报头压缩,降低开销
4.支持服务器推送。可以将响应主动"推送"到客户端缓存中(服务器可以对一个客户端请求发送多个响应,例如请求了 HTML,可以响应需要的 CSS 和 JavaScript)

4.3 HTTP不同版本的区别

4.3.1 HTTP1.0和HTTP1.1的区别

  1. 连接方式:短连接和长连接
    • HTTP1.0:默认使用短连接,每次请求都要重新建立和断开TCP连接,开销较大。
    • HTTP1.1:默认使用长连接,通过Connection: keep-alive实现,可在一个连接上发送多个请求,减少连接建立和断开的开销。
  2. 错误状态响应码:响应码种类更多
    • HTTP1.0:错误状态响应码较少。
    • HTTP1.1:新增了24个错误状态响应码,如409(Conflict)、410(Gone)等,能更精确地表示请求状态。
  3. 缓存处理:缓存控制策略更多
    • HTTP1.0:主要通过If-Modified-SinceExpires来判断缓存。
    • HTTP1.1:引入了更多缓存控制策略,如Entity tagIf-Unmodified-SinceIf-MatchIf-None-Match等,使缓存控制更灵活。
  4. 带宽优化及网络连接的使用:只能返回整个对象->支持请求资源的某个部分
    • HTTP1.0:不支持断点续传,客户端如需部分资源,服务器会返回整个对象,浪费带宽。
    • HTTP1.1:引入range头域,支持只请求资源的某个部分,返回码为206(Partial Content),能更好地利用带宽和连接。
  5. 请求方法 :请求方法变多
    • HTTP1.0:请求方法较少。
    • HTTP1.1:新增了PUTHEADOPTIONS等请求方法,功能更丰富。
  6. HOST字段:新增host字段是服务器域名
    • HTTP1.0:认为每台服务器绑定唯一IP地址,请求消息中的URL没有传递主机名。
    • HTTP1.1:新增HOST字段,用于指定服务器域名,支持一台物理服务器上的多个虚拟主机共享一个IP地址。

4.3.2 HTTP2.0与HTTP1.1的区别

  1. 报文格式:变成二进制,并且头部压缩
    • HTTP1.1:采用文本格式,以ASCII编码,可读性好但解析效率低,头部字段存在冗余。
    • HTTP2.0:采用二进制格式,将HTTP消息分割成二进制帧,解析更高效,且对头部采用HPACK算法进行压缩,减少了头部传输的大小和开销。
  2. 多路复用:实现了真正的多路复用,多个请求和响应可以在同一个TCP连接上并发交错传输
    • HTTP1.1:虽有管道化技术,但存在队头阻塞问题,多个请求在一个连接上按顺序处理,前面的请求阻塞会影响后面请求。
    • HTTP2.0:实现了真正的多路复用,多个请求和响应可以在同一个TCP连接上并发交错传输,每个请求和响应都有唯一的流标识符,避免了队头阻塞,提高了连接利用率。
  3. 服务器推送:支持服务器推送给客户端
    • HTTP1.1:只能由客户端发起请求,服务器被动响应。
    • HTTP2.0:支持服务器主动推送资源给客户端,服务器可以根据客户端的情况,提前推送可能需要的资源,减少客户端的等待时间。
  4. 优先级:允许对请求设置优先级
    • HTTP1.1:没有对请求优先级的明确支持。
    • HTTP2.0:允许对请求设置优先级,服务器可以优先处理高优先级的请求,让重要资源更快地传输给客户端。

4.3.3 HTTP3.0

HTTP3.0是基于UDP的QUIC协议实现的。其特点如下:

  1. 低延迟:通过减少握手时延来降低连接建立的延迟,使用0-RTT机制,允许在连接初始化阶段就发送数据,避免了传统TCP三次握手带来的延迟。
  2. 多路复用与无队头阻塞:在QUIC上原生支持多路复用,每个流可以独立传输和确认,彻底消除了队头阻塞问题,相比HTTP2.0在TCP层面仍存在的队头阻塞问题有了进一步优化。
  3. 连接迁移允许在IP地址变化的情况下保持连接状态,对于移动设备或网络环境变化时的连接持久性很重要,可提高用户体验。
  4. 更快的错误恢复:提供了更高效的重传机制,能够更快地检测和恢复丢包,在无线网络环境下表现更为出色。
  5. 安全设计:将TLS加密集成到了协议栈中,使得每个新的QUIC连接都能快速且安全地建立起来,并且可以针对每个流独立执行加密操作。
  6. 拥塞控制优化:包含了自己的拥塞控制算法,可以根据网络条件动态调整带宽使用,以提供更好的整体性能和稳定性。

5.HTTP常见状态码

2XX 成功

200 服务器成功返回网页
204 NO CONTENT,请求成功响应,没有资源返回

3XX 重定向

301 Move permanently 永久性重定向,表示请求的资源已被分配了新的URI,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
302 found 临时性重定向,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
304 未修改,自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容,进而节省带宽和开销。
307 Temporary Redirect 临时的重定向,该响应代码与302重定向有所区别的地方在于,收到307响应码后,客户端应保持请求方法不变向新的地址发出请求

4XX 客户端错误

400 bad request ,表示请求报文中存在语法错误
401错误代表用户没有访问权限,需要进行身份认证。
403 forbidden ,表明对请求资源的访问被服务器拒绝了
404 not found
405 Method Not Allowed,客户端请求中的方法被禁止

5XX 服务器错误

500 internal Server error ,表示服务器端在执行请求时发生了错误
502 Bad Gateway,作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 service unavailable ,服务器超时,服务器超负载或正在进行停机维护
504 Gateway Timeout 表示扮演网关或者代理的服务器无法在规定的时间内获得想要的响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值