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
<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 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式。URL 编码使用 “%” 其后跟随两位的十六进制数来替换非 ASCII 字符。URL 不能包含空格。URL 编码通常使用 + 来替换空格
在HTTP协议中并没规定URL的长度限制,但各个浏览器厂商及Web服务软件是有这个限制的,具体如下:
浏览器 最大长度(字节) IE浏览器 2,083 Firefox 65,536 Chrome 8,182 Safari 80,000
Web服务软件:
Web Service 最大长度(字节) 备注 Apache 8,192 IIS 16,384 configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting. Nginx 1,000 client_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是否支持 200 OK 是 是 206 Partial Content 否 是 301 Moved Permanently 是 是 304 Not Modified 是 是 400 Bad Request 是 是 403 Forbidden 是 是 404 Not Found 是 是 500 Internal Server Error 是 是 502 Bad Gateway 是 是 503 Service Unavailable 是 是 504 Gateway 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字段
描述
备注
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字段
描述
备注
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字段
描述
备注
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字段
描述
备注
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
六、参考文献