HTTP 协协协协 协协 一( @协 协协 一) 协协 - 协协协协协协 -UED- 协协 1
1
HTTP 协议介绍一舟( @ 淘一舟)
淘宝 - 北京研发中心 -UED- 前端
2
目录• 感性认识• 重要概念• 探访细节
淘宝 - 北京研发中心 -UED- 前端
3
感性认识
淘宝 - 北京研发中心 -UED- 前端
4
古代浏览器
淘宝 - 北京研发中心 -UED- 前端
5
现代浏览器
淘宝 - 北京研发中心 -UED- 前端
6
浏览器市场
• http://brow.data.cnzz.com/• http://www.w3counter.com/globalstats.php
淘宝 - 北京研发中心 -UED- 前端
7
关于 HTTP 的问题• HTTP 是什么?• 工作原理是什么?• HTTP 和 HTTPS 的区别?• 重要的头信息有哪些,都有什么作用?• 非文本(图片、文件)是怎么传输的?• ……
淘宝 - 北京研发中心 -UED- 前端
8
HTTP 是什么?• http://zh.wikipedia.org/zh-cn/Http• URI/URL/URN• C/S 模式• Application Layer (类似 FTP , SMTP 等等)• Request/Response 范式• RFC2616 http://tools.ietf.org/html/rfc2616• 超文本“转移”协议
淘宝 - 北京研发中心 -UED- 前端
9
历史版本• HTTP/0.9
• 跨网络的简单原始数据传输,只接受 GET ,通讯中不指定版本号,且不支持请求头,已过时
• HTTP/1.0• 还在使用,尤其在代理服务器应用方面, RFC1945• 通讯中指定版本号, MIME 消息格式
• HTTP/1.1• 默认持久链接,分层代理,考虑了缓存、虚拟
主机等等影响
淘宝 - 北京研发中心 -UED- 前端
10
工作原理
• http://www.cnpaf.net/Class/HTTP/200408/81.html
淘宝 - 北京研发中心 -UED- 前端
11
工作原理
淘宝 - 北京研发中心 -UED- 前端
12
动手验证
• 动手练习 15min 时间
Terminal
Fiddler2
wireshark
淘宝 - 北京研发中心 -UED- 前端
13
HTTP 与 HTTPs 的区别• HTTP 的安全版• 默认使用 TCP 端口 443• HTTPS 是两个协议的结合,即传输层 SSL +应
用层 HTTP• 服务器必需有 PKI 证书,而客户端则不一定
淘宝 - 北京研发中心 -UED- 前端
14
重要概念
淘宝 - 北京研发中心 -UED- 前端
15
几个概念• 1. 连接 (Connection) :传输层的一个实际数据
流,它建立在两个相互通讯的应用程序之间。• 2. 消息 (Message) : HTTP 的基本通讯单位。• 3. 请求 (Request) :一个从客户端到服务器的请
求信息包括应用于资源的方法、资源的标识符和协议的版本号。
淘宝 - 北京研发中心 -UED- 前端
16
几个概念• 4. 响应 (Response) :一个从服务器返回的信息
包括 HTTP 协议的版本号、请求的状态和文档的MIME 类型,文档实体。
• 5. 资源 (Resource) :由 URI 标识的网络数据对象或或服务。
• 6. 实体 (Entity) :数据资源或来自服务资源的回应的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体本身的内容。
淘宝 - 北京研发中心 -UED- 前端
17
几个概念• 7. 客户端 (Client) :一个以发送请求为目的而建
立连接的应用程序。• 8. 用户代理 (User Agent) :初始化一个请求的
客户端。可以是浏览器、编辑器或其他工具。• 9. 服务器 (Server) :一个以接受连接并对请求
返回信息的应用程序。
淘宝 - 北京研发中心 -UED- 前端
18
几个概念• 10. 源服务器 (Origin Server) :是一个指定资
源可以在其上驻留或被创建的服务器。• 11. 代理 (Proxy) :一个中间程序。它可以充当
服务器,也可以充当客户机,为其它客户端建立请求。代理经常作为防火墙。
淘宝 - 北京研发中心 -UED- 前端
19
几个概念• 12. 网关 (Gateway) :一个作为其它服务器中间
媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器。
• 13. 通道 (Tunnel) :是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于 HTTP 通讯。
• 14. 缓存 (Cache) :响应信息的局域存储。
淘宝 - 北京研发中心 -UED- 前端
20
http://www.g.cn:80/s/search?q= 淘宝 UED&btnG=GCN+搜索
URL协议类型
主机
端口
路径和查询
查询参数
大小写不敏感
为空即默认
不安全的字符和 %HEXHEX 相同
http://abc.com:80/~smith/home.html htTP://ABC.com/%7Esmith/home.html http://ABC.com:/%7esmith/home.html
其他: URL 的长度限制到底是多少?参数如果编码?淘宝 - 北京研发中心 -UED- 前端
21
时间格式
Sunday, 06-Nov-94 08:49:37 GMT
Sun Nov 6 08:49:37 1994
Sun, 06 Nov 1994 08:49:37 GMT
淘宝 - 北京研发中心 -UED- 前端
22
探访细节
淘宝 - 北京研发中心 -UED- 前端
23
HTTP-Message
HTTP-Message
(Request-Line | Status-Line)
*(Message-Header CRLF)
[ Message-Body ]
(Request-Line | Status-Line) *(message-header CRLF) CRLF [ message-body ]
CRLF
淘宝 - 北京研发中心 -UED- 前端
24
Request-Line
Method SP Request-URI SP HTTP-Version CRLF
Request-Line
Method
Request-URI
HTTP-Version
SP
SP
CRLF
淘宝 - 北京研发中心 -UED- 前端
25
Status-Line
HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Status-Line
Reason-Phrase
Status-Code
HTTP-Version
SP
SP
CRLF
淘宝 - 北京研发中心 -UED- 前端
26
Method
GETDELETE
TRACE
CONNECTPUT
HEADOPTIONS
POST
淘宝 - 北京研发中心 -UED- 前端
27
Status-Code
信息100
101
成功
201
202
203
204
205
206200
重定向300
303
304
305
306 307
301
302
417
402401
403
404客户端错误
400
服务器错误
500503
504
502 505
501
淘宝 - 北京研发中心 -UED- 前端
28
状态码举例• 1xx:信息——仅在与 HTTP 服务器沟通时使用
• 100(“Continue”)
• 2xx:成功——成功收到、理解和接受动作• 200(“OK”) 、 201(“Created”) 、 204(“No Content”)
• 3xx:重定向——为完成请求,必须进一步采取措施• 301(“Moved Permanently”) 、 303(“See Other”) 、 304(“Not
Modified”) 、 307(“Temporary Redirect”)
• 4xx:客户端错误——请求包含错误的语法或不能完成• 400(“Bad
Request”) 、 401(“Unauthorized”) 、 403(“Forbidden”) 、 404(“Not Found”) 、 405(“Method Not Allowed”) 、 406(“Not Acceptable”) 、 409(“Conflict”) 、 410(“Gone”)
• 5xx:服务器端错误——服务器不能完成明显合理的请求• 500(“Internal Server Error”) 、 503(“Service Unavailable”)
淘宝 - 北京研发中心 -UED- 前端
29
Message-HeaderCache-Control, Connection, Date, Pragma, Trailer, Transfer-Encoding, Upgrade, Via, Warning
通用
Accept, Accept-Charset, Accept-Encoding, Accept-Language, Authorization, Expect, From, Host, If-Match, If-Modified-Since, If-None-Match, If-Range, If-Unmodified-Since, Max-Forwards, Proxy-Authorization, Range, Referer, TE, User-Agent
请求
Accept-Ranges, Age, ETag, Location, Proxy-Authenticate, Retry-After, Server, Vary, WWW-Authenticate
响应
Allow, Content-Encoding, Content-Language, Content-Length, Content-Location, Content-MD5, Content-Range, Content-Type, Expires, Last-Modified
实体
淘宝 - 北京研发中心 -UED- 前端
30
Message-Header- 其他
Cookie
Set-Cookie
X-Powered-By
X-Requested-With
“X-”开头
淘宝 - 北京研发中心 -UED- 前端
31
重要的 HTTP 头…
Accept-Charset
Content-Type
Accept-Encoding Content-Encoding
Cache-Control
User-Agent
Accept
Expires
Last-Modified
Location
Age
ETag
DateHost
Referer
Server
淘宝 - 北京研发中心 -UED- 前端
32
请求的 Header举例• Accept: 请求希望服务器能响应何种表现格式。• Accept-Encoding:告诉服务器可以接收何种压缩格式传输,以减少带宽。
• Range: 请求获得一个资源的部分表示,常与 If-Unmodified-Since一起用。
• If-Modified-Since: 通过前一次响应 Last-Modified 的时间值,当条件不成立,请求成功返回。
• If-Match: 通过前次响应 ETag值,当条件不成立,请求成功返回。• If-Range: 通过前次响应的 ETag 或 Last-Modified值,若请求部分变化,服务器需返回新的范围。
• Authorization:按特定认证方案编码的用户名和密码证书,服务器接收验证通过执行请求。
淘宝 - 北京研发中心 -UED- 前端
33
响应的 Header举例• Accept-Ranges: 表明支持部分 Get 请求,客户端通过 Head 请求获取该值,然后发送 Range报头请求,获取资源部分表示。
• Content-Encoding: 对应 Accept-Encoding 请求报头。• Content-Language: 实体主体采用的自然语言,对应 Accept-
Language 请求报头,可能多个值。• Content-Length:给出实体主体大小,客户端可据此做读取准备,
也可通过 Head 请求来获知。• Content-Location:把请求资源的规范 URI告知客户端,但并不要
求其使用新 URI 。• Content-MD5: 实体主体 MD5, 可检测错误损坏。
淘宝 - 北京研发中心 -UED- 前端
34
媒体类型
请求 Accept-Charset
Accept
Content-Type 响应
淘宝 - 北京研发中心 -UED- 前端
35
内容编码
请求 Accept-Encoding
Content-Encoding
响应
gzip
compress
x-gzip
x-compress
deflate
identity
淘宝 - 北京研发中心 -UED- 前端
36
传输编码
Transfer-Encoding 响应
chunked
淘宝 - 北京研发中心 -UED- 前端
37
传输范围
请求
Range
Content-Range
响应
206 200
Accept-Ranges
淘宝 - 北京研发中心 -UED- 前端
38
缓存
减少完成的请求: Validation
性能
减少请求: Expiration
淘宝 - 北京研发中心 -UED- 前端
39
缓存失效
减少请求:Expiration
Expires, Date, Age
年龄计算
更新周期计算
是否失效:年龄 -更新周期
淘宝 - 北京研发中心 -UED- 前端
40
缓存证实
减少完成的请求: Validation
弱证实: Last-Modified
强证实: Etag ( 1.0 不支持)
If-Modified-Since, If-Unmodified-Since
If-Match, If-None-Match
淘宝 - 北京研发中心 -UED- 前端
41
可缓存性
可缓存性:Cacheability
状态码是: 200, 203, 206, 300, 301, 410 ,除非明确的禁止
其他状态码都禁止,除非明确允许
支持 Range, Content-Range => 206
理论上:除了明确指出不可缓存的以外都可以被缓存实际上:需要服务器指定失效和证实才能被缓存
淘宝 - 北京研发中心 -UED- 前端
42
缓存控制Cache-Control
淘宝 - 北京研发中心 -UED- 前端
43
缓存控制
缓存控制:Cache-Control
对失效 : s-maxage, max-age, min-fresh, max-stale
对可缓存性 : public, private, no-cache, no-store
对证实 : only-if-cached, must-revalidate, proxy-revalidate, no-transform
淘宝 - 北京研发中心 -UED- 前端
44
缓存的其他话题• 从缓存构造响应• 缓存协商响应• 共享和非共享缓存• 历史和缓存的区别
淘宝 - 北京研发中心 -UED- 前端
45
Q&A
淘宝 - 北京研发中心 -UED- 前端