Http协议介绍

3,619 views

Published on

Published in: Technology
  • Be the first to comment

Http协议介绍

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

×