【HTTP协议学习笔记】---http的前世今生


前言

HyperText Transfer Protocol 译为超文本传输协议,应用层协议


一、HTTP/0.9

最早的HTTP协议中,request只有一行(因此又被称为one-line protocol),response只有请求的文件本身。这时的HTTP是没有版本号的(请求头中没有版本号),HTTP/0.9是为了区分它与后续HTTP版本的称定。

示例如下

req:

GET /mypage.html

res:

<html>
A simple html page
</html>

二、HTTP/1.0

HTTP/1.0 新增了许多特性

  • req头部现在会带上使用的HTTP协议版本号 HTTP/1.0
  • res会附带状态码,使得客户端可以方便得认识到这次http请求成功与否
  • req和res现在都带有头部,http开始具有强大的可扩展性
  • 新增的Content-Type请求头部字段,使得HTTP不再仅限于传送单纯的html文件

示例如下

req:

GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

res:

<html>
200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>
</html>

三、HTTP/1.1

由于http/1.0的可扩展性,许多浏览器、服务器厂商开始为自己的http新增各种各样的方法,这又带来了新的问题:不同厂商产品间的互通性无法得到保障。

因此,需要一个标准化的http协议。HTTP/1.1正是在这种需要下催生的,它是第一个标准化的HTTP协议

HTTP/1.1新增的一些主要特性如下:

  • 持久化连接,res头部新增的Connection字段可设置为Keep-Alive,这告诉客户端很快还有相关文件需要传输,不用关闭当前TCP连接。在持久化支持之前,用户访问一个页面可能需要加载许多其他资源(如图片),而每访问一个资源就需要建立一个新的TCP连接,导致了许多额外开销
  • 管道支持,客户端不必再等待收到上一个http请求的响应才开始发送新的http请求,这些请求会推送到一个缓冲队列(管道),从而使客户端的http请求更加自由独立。

HTTP/1.x时代,HTTP协议一直在发展,并不断完善其功能。
比如:

  • 标准化的http服务器接口设计模式 :RESTful API
  • 为解决同源策略带来的CORS跨域请求问题,新增了Allow-Control-Allow-Origin等头部
  • 由于安全问题的需要,催生了基于SSL(后逐渐标准化为TLS协议)的HTTPs协议
  • 由于保护隐私的需要,新增的DNT(Do Not Track)首部

四、HTTP/2

随着Web应用的发展,Web页面越来越复杂,特别是对于各种多媒体文件的需求、页面交互需要的脚本文件需求增大,原有的HTTP协议很难负荷这些需求,HTTP/2由此催生。
HTTP/2 不同于 HTTP/1.x的主要特点如下:

  • HTTP/2不再是使用纯文本的方式传输,而是使用二进制文件的方式传输
  • HTTP/2采用多路传输,在同一个TCP连接上可以同时发送多条http请求
  • HTTP/2压缩头部,减少开销
  • HTTP/2允许服务器向用户端cache填充数据

HTTP/2 发展过程中的重要扩展:

  • 一些Client-Hints相关头部,使得客户端可主动为服务端提供自己的一些相关信息,从而获得更优质、面向用户的服务体验
  • Cookie新增一些安全相关前缀,来保证Cookie不会被随意篡改

总结

从HTTP发展史可以很好了解到当今HTTP协议各种功能由何而来,解决了为什么要实现这些功能的问题。
下一代HTTP/3协议也逐渐问世,其不再基于TCP/TLS协议,而是基于QUIC协议(Quick UDP Internet Connection)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值