对HTTP特征的一点理解

HTTP概述

HTTP 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。

通过使用网页浏览器、网络爬虫或者其它的工具,

客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。

我们称这个客户端用户代理程序user agent)。

服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器源服务器origin server)。

在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。


使用TCP作为运输层协议

尽管 TCP/IP 协议是互联网上最流行的应用,HTTP 协议中,并没有规定必须使用它或它支持的层。

事实上,HTTP可以在任何互联网协议上,或其他网络上实现。

HTTP 假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。

因此也就是其在 TCP/IP 协议族使用 TCP 作为其传输层。


HTTP 短连接与持久连接(keep alive)

由于HTTP连接基于TCP连接,

在早期的短连接中,单一的TCP连接内仅仅执行一个“客户端发送请求——服务器发送应答”,之后便释放TCP连接。

持久连接的出现,使得同一个TCP在活跃期间(keep-alive)复用,避免重重复复的TCP握手。

  • 非流水线方式

    收到响应后才能发出下一个请求。

  • 流水线方式

    客户端在收到响应报文之前就可以接着发送新的请求报文。

HTTP/0.9 :短连接

已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。

每个HTTP请求都要经历一次 DNS 解析、三次握手、传输和四次挥手。反复创建和断开TCP连接的开销巨大。

HTTP/1.0 :持久连接概念提出

这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。

持久连接,即一个 TCP 连接服务多次请求

客户端在请求 header 中携带Connection: Keep-Alive,即是在向服务端请求持久连接

如果服务端接受持久连接,则会在响应 header 中同样携带 Connection: Keep-Alive ,这样客户端便会继续使用同一个 TCP 连接发送接下来的若干请求。

Keep-Alive 的默认参数是[ timout = 5, max = 100 ],即一个TCP连接可以服务至多 5 秒内的 100 次请求。

当服务端主动切断一个持久连接时(或服务端不支持持久连接),则会在 header 中携带Connection: Close,要求客户端停止使用这一连接。

HTTP/1.1 :持久连接被默认采用,还支持以管道方式在同时发送多个请求
HTTP/2 :基于SPDY协议

在 HTTP/2 的第一版草案(对 SPDY 协议的复刻)中,新增的性能改进不仅包括HTTP/1.1中已有的多路复用,修复队头阻塞问题,允许设置设定请求优先级,还包含了一个头部压缩算法(HPACK)。

此外, HTTP/2 采用了二进制而非明文来打包、传输客户端—服务器间的数据。



HTTP 无状态(stateless)

指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息

事务:指的时一系列的信息交换,而这一系列信息交换是不可分割的整体,也就是说,要么所有的信息交换都完成,要么一次交换都不进行。

HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”,不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。

客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。

于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值