http协议目前有如下几个版本:

  • HTTP/0.9    HTTP的1991原型版本。这个版本的设计有许多严重的缺陷,几乎没有人在使用了
  • HTTP/1.0    第一个得到广泛应有的HTTP协议,详情见https://tools.ietf.org/html/rfc1945
  • HTTP/1.0+  在1.0版本基础上增加Keep Alive连接,虚拟机支持已经代理连接支持等特性。也称之为1.1的非正式版本,详情见https://tools.ietf.org/html/rfc2068
  • HTTP/1.1    当前比较流行的HTTP协议版本,该版本校正了之前版本的结构设计缺陷,明确了语义,引入了性能优化特性,删除了一些不友好的特性,详情见https://tools.ietf.org/html/rfc2616
  • HTTP/NG    又称HTTP/2.0,该版本重点关注性能的优化,具有二进制分帧,首部压缩,多路复用,服务器推送等新特性。详情见https://tools.ietf.org/html/rfc7540

发展历史图如下:

HTTP发展历史

注:

Google在2012年时推出了自己SPDY协议,该协议优化了HTTP/1.x中的请求延迟,解决了安全性等问题,大部分特性在HTTP/2.0中均已包含进去了

一、HTTP1.0和HTTP1.1的常见区别

HTTP/1.1是目前最广泛应用的协议,它与HTTP/1.0的几个明显在应用上差异如下:

  • 长连接与短连接
    • HTTP/1.0仅支持短连接,即每次请求都要经历一次建立连接(三次握手)的过程,效率很低,有些时候我们看到有些基于HTTP/1.0的协议,使用Connection: keep-alive来打开长连接,这里的HTTP/1.0是通常指HTTP/1.0+,真正的HTTP/1.0协议是没有这个特性的
    • HTTP/1.1默认就是长连接,只要在Keep Alive的时间内,再次发起请求不需要再重新建立一个连接,直接使用上一次建立好的连接进行传输,减少了建立和关闭连接的资源消耗和延迟
  • 缓存控制
    • HTTP/1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准
    • HTTP/1.1引入了更多的缓存控制策略例如ETag,If-Unmodified-Since, If-Match, If-None-Match,Cache-Control等更多可供选择的HEAD头来控制缓存策略
  • 错误通知
    • 在HTTP/1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除
  • Host头
    • 在HTTP/1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP/1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
  • 断点续传
    • HTTP/1.1在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)

总结图:

HTTP/1.0与HTTP/1.1的区别

二、URL

  • URI:统一资源标识符(Uniform Resource Identifier)
  • URL: 统一资源定位符(Uniform Resource Locator)
  • URN: 统一资源名(Uniform Resource Name)

URI = URL + URN

  • URL完整定义:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

举例:

mailto: president@example.com
ftp://ftp.example.com/pub/books.xls
rtsp://www.example.com:554/videos/cook.rmvb
ftp://joe:joepassword@www.joes.com:23/pub/gun;type=5;graphic=6?item=123&mode=test#dog 
  • URL 字符集与转义

由于 URL 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式。URL 编码使用 “%” 其后跟随两位的十六进制数来替换非 ASCII 字符。URL 不能包含空格。URL 编码通常使用 + 来替换空格

  • URL的最大长度

在HTTP协议中并没规定URL的长度限制,但各个浏览器厂商及Web服务软件是有这个限制的,具体如下:

浏览器最大长度(字节)
IE浏览器 2,083
Firefox65,536
Chrome8,182
Safari80,000

Web服务软件:

Web Service最大长度(字节)备注
Apache8,192
IIS16,384configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryStringsetting.
Nginx1,000client_header_buffer_size 1k
large_client_header_buffers 4 4k/8k

三、常见状态码

  • 100 – 199 信息性状态码
  • 200 – 299 成功状态码
  • 300 – 399 重定向状态码
  • 400 – 499 客户端错误状态码
  • 500 – 599 服务器错误状态码

常见状态码列表:

状态码含义HTTP/1.0是否支持HTTP/1.1是否支持
200OK
206Partial Content
301Moved Permanently
304Not Modified
400Bad Request
403Forbidden
404Not Found
500Internal Server Error
502Bad Gateway
503Service Unavailable
504Gateway Timeout

四、METHOD

HTTP协议定义了一组安全的方法:GET方法和HEAD方法,即这两个方法不会让服务产生新的内容或影响。

常见METHOD列表:

方法名含义HTTP/1.0是否支持HTTP/1.1是否支持
GET获取资源
HEAD获取报文HEAD
POST向服务器提交数据
PUT向服务器提交资源
DELETE请求服务器删除资源
TRACE网络跟踪
CONNECT与PROXY之间的连接管理
OPTIONS查询能力

五、HEAD

HEAD头分为通用HEAD, 请求HEAD, 响应HEAD和实体HEAD四个部分

  • 通用HEAD
HEAD字段 描述 备注
Connection 允许客户端和服务器指定与请求/响应连接有关的选项 HTTP/1.1
Date 创建报文的日期时间 HTTP/1.0、HTTP/1.1
Transfer-Encoding 指定报文主体的传输编码方式 HTTP/1.1
Via 代理服务器的相关信息 HTTP/1.1
Cache-Control 控制缓存的行为 HTTP/1.1
  • 请求HEAD
HEAD字段 描述 备注
From 客户端用户的E-Mail地址 HTTP/1.0、HTTP/1.1
Host 接收请求的服务器的主机名和端口号 HTTP/1.1
Referer 当前请求URI的文档的URL HTTP/1.0、HTTP/1.1
User-Agent HTTP客户端程序的信息 HTTP/1.0、HTTP/1.1
Accept 告诉服务器客户端能接收哪些媒体类型 HTTP/1.1
Accept-Charset 告诉服务器客户端能接收哪些字符集 HTTP/1.1
Accept-Encoding 告诉服务器客户端能接收哪些内容编码 HTTP/1.1
Accept-Language 告诉服务器客户端能接收哪些语言 HTTP/1.1
Authorization Web 认证信息 HTTP/1.0、HTTP/1.1
If-Match 比较实体标记(ETag) HTTP/1.1
If-Modified-Since 比较资源的更新时间 HTTP/1.0、HTTP/1.1
If-None-Match 比较实体标记(与 If-Match 相反) HTTP/1.1
Range 实体的字节范围请求 HTTP/1.1
  • 响应HEAD
HEAD字段 描述 备注
Age 响应持续时间 HTTP/1.1
Server Web Service的名称和版本 HTTP/1.0、HTTP/1.1
Location 客户端重定向至指定 URI HTTP/1.0、HTTP/1.1
Accept-Ranges 服务器可接受的范围类型 HTTP/1.1
Vary 代理服务器缓存的管理信息 HTTP/1.1
WWW-Authenticate 服务器对客户端的认证信息 HTTP/1.0、HTTP/1.1
  • 实体HEAD
HEAD字段 描述 备注
Content-Encoding 对Body执行的编码方式 HTTP/1.0、HTTP/1.1
Content-Language 对Body执行的自然语言 HTTP/1.0、HTTP/1.1
Content-Length Body的长度 HTTP/1.0、HTTP/1.1
Content-Range Body的位置范围 HTTP/1.1
Content-Type Body的媒体类型 HTTP/1.0、HTTP/1.1
Expires Body的过期日期时间 HTTP/1.0、HTTP/1.1
Last-Modified Body的最后一次修改的日期和时间 HTTP/1.0、HTTP/1.1
ETag Body的标记 HTTP/1.1

六、参考文献

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post Navigation