SlideShare a Scribd company logo
1 of 45
HTTP协议介绍
                   一舟(@淘一舟)



淘宝-北京研发中心-UED-前端              1
目录
• 感性认识
• 重要概念
• 探访细节




淘宝-北京研发中心-UED-前端        2
感性认识



淘宝-北京研发中心-UED-前端          3
古代浏览器




淘宝-北京研发中心-UED-前端           4
现代浏览器




淘宝-北京研发中心-UED-前端           5
浏览器市场




• http://brow.data.cnzz.com/
• http://www.w3counter.com/globalstats.php

 淘宝-北京研发中心-UED-前端                            6
关于HTTP的问题
•    HTTP是什么?
•    工作原理是什么?
•    HTTP和HTTPS的区别?
•    重要的头信息有哪些,都有什么作用?
•    非文本(图片、文件)是怎么传输的?
•    ……




    淘宝-北京研发中心-UED-前端      7
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
历史版本
• HTTP/0.9
  • 跨网络的简单原始数据传输,只接受 GET ,通讯中不指定版本
    号,且不支持请求头,已过时
• HTTP/1.0
  • 还在使用,尤其在代理服务器应用方面,RFC1945
  • 通讯中指定版本号,MIME消息格式
• HTTP/1.1
  • 默认持久链接,分层代理,考虑了缓存、虚拟
    主机等等影响


淘宝-北京研发中心-UED-前端                     9
工作原理




• http://www.cnpaf.net/Class/HTTP/200408/81.html

 淘宝-北京研发中心-UED-前端                                  10
工作原理




淘宝-北京研发中心-UED-前端          11
动手验证



      Terminal                     wireshark



                        Fiddler2
•    动手练习15min时间

    淘宝-北京研发中心-UED-前端                           12
HTTP与HTTPs的区别
• HTTP的安全版
• 默认使用TCP端口443
• HTTPS是两个协议的结合,即传输层SSL+应用
  层HTTP
• 服务器必需有PKI证书,而客户端则不一定




淘宝-北京研发中心-UED-前端             13
重要概念



淘宝-北京研发中心-UED-前端          14
几个概念
• 1.连接(Connection):传输层的一个实际数据流,
  它建立在两个相互通讯的应用程序之间。
• 2.消息(Message):HTTP的基本通讯单位。
• 3.请求(Request):一个从客户端到服务器的请求
  信息包括应用于资源的方法、资源的标识符和协
  议的版本号。




淘宝-北京研发中心-UED-前端                  15
几个概念
• 4.响应(Response):一个从服务器返回的信息包
  括HTTP协议的版本号、请求的状态和文档的
  MIME类型,文档实体。
• 5.资源(Resource):由URI标识的网络数据对象或
  或服务。
• 6.实体(Entity):数据资源或来自服务资源的回应
  的一种特殊表示方法,它可能被包围在一个请求
  或响应信息中。一个实体包括实体头信息和实体
  本身的内容。

淘宝-北京研发中心-UED-前端                  16
几个概念
• 7.客户端(Client):一个以发送请求为目的而建立
  连接的应用程序。
• 8.用户代理(User Agent):初始化一个请求的客户
  端。可以是浏览器、编辑器或其他工具。
• 9.服务器(Server):一个以接受连接并对请求返回
  信息的应用程序。




淘宝-北京研发中心-UED-前端                  17
几个概念
• 10.源服务器(Origin Server):是一个指定资源可
  以在其上驻留或被创建的服务器。
• 11.代理(Proxy):一个中间程序。它可以充当服务
  器,也可以充当客户机,为其它客户端建立请
  求。代理经常作为防火墙。




淘宝-北京研发中心-UED-前端                    18
几个概念
• 12.网关(Gateway):一个作为其它服务器中间媒
  介的服务器。与代理不同的是,网关接受请求就
  好象对被请求的资源来说它就是源服务器。
• 13.通道(Tunnel):是作为两个连接中继的中介程
  序。一旦激活,通道便被认为不属于HTTP通讯。
• 14.缓存(Cache):响应信息的局域存储。




淘宝-北京研发中心-UED-前端            19
协议类型            端口
                         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
时间格式
                   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
探访细节



淘宝-北京研发中心-UED-前端          22
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
Request-Line
            Method SP Request-URI SP HTTP-Version CRLF




                                Method       SP



        Request-Line           Request-URI        SP



                                HTTP-Version       CRLF




淘宝-北京研发中心-UED-前端                                          24
Status-Line
        HTTP-Version SP Status-Code SP Reason-Phrase CRLF




                                HTTP-Version         SP



         Status-Line           Status-Code      SP



                               Reason-Phrase      CRLF




淘宝-北京研发中心-UED-前端                                            25
Method
                        DELETE
          TRACE                         GET
                      POST              CONNECT
           PUT


                   OPTIONS       HEAD




淘宝-北京研发中心-UED-前端                                  26
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
状态码举例
• 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
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
Message-Header-其他

                   Cookie
                                     X-Powered-By


           Set-Cookie
                                       X-Requested-With


                            “X-”开头




淘宝-北京研发中心-UED-前端                                          30
重要的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
请求的Header举例
• Accept:请求希望服务器能响应何种表现格式。
• Accept-Encoding:告诉服务器可以接收何种压缩格式传输,以减少带
  宽。
• Range:请求获得一个资源的部分表示,常与If-Unmodified-Since一起
  用。
• If-Modified-Since:通过前一次响应Last-Modified的时间值,当条件不
  成立,请求成功返回。
• If-Match:通过前次响应ETag值,当条件不成立,请求成功返回。
• If-Range:通过前次响应的ETag或Last-Modified值,若请求部分变
  化,服务器需返回新的范围。
• Authorization:按特定认证方案编码的用户名和密码证书,服务器接收
  验证通过执行请求。


淘宝-北京研发中心-UED-前端                                    32
响应的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
媒体类型

                   Content-Type        响应




                    Accept

    请求                Accept-Charset




淘宝-北京研发中心-UED-前端                            34
内容编码
                                      响应

                   Content-Encoding




                                      gzip
                                      x-gzip
   请求              Accept-Encoding    x-compress

                                      deflate
                                      compress
                                      identity

淘宝-北京研发中心-UED-前端                                   35
传输编码

               Transfer-Encoding   响应



                    chunked




淘宝-北京研发中心-UED-前端                        36
传输范围


                   Accept-Ranges   响应


                   Content-Range


                   206     200



                         Range

     请求
淘宝-北京研发中心-UED-前端                        37
缓存

                   减少请求:Expiration

             性能

                   减少完成的请求:Validation




淘宝-北京研发中心-UED-前端                        38
缓存失效

                      Expires, Date, Age


                     年龄计算
  减少请求:Expiration
                     更新周期计算


                     是否失效:年龄-更新周期




淘宝-北京研发中心-UED-前端                           39
缓存证实
                      弱证实:Last-Modified


                       If-Modified-Since, If-Unmodified-Since
减少完成的请求:Validation
                     强证实:Etag (1.0不支持)


                       If-Match, If-None-Match




 淘宝-北京研发中心-UED-前端                                           40
可缓存性
      理论上:除了明确指出不可缓存的以外都可以被缓存
      实际上:需要服务器指定失效和证实才能被缓存



                     状态码是:200, 203, 206, 300, 301, 410,除非明确的禁止


可缓存性:                               支持Range, Content-Range => 206
Cacheability

                     其他状态码都禁止,除非明确允许




  淘宝-北京研发中心-UED-前端                                              41
缓存控制
  Cache-Control




淘宝-北京研发中心-UED-前端          42
缓存控制

                      对失效: 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
缓存的其他话题
•    从缓存构造响应
•    缓存协商响应
•    共享和非共享缓存
•    历史和缓存的区别




    淘宝-北京研发中心-UED-前端     44
Q&A



淘宝-北京研发中心-UED-前端         45

More Related Content

Similar to Http协议介绍

Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送yongboy
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Justin Lin
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overviewqianshi
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
实时Web的前世今生未来
实时Web的前世今生未来实时Web的前世今生未来
实时Web的前世今生未来RolfZhang
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server志賢 黃
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Res tful api design tw-2.0
Res tful api design tw-2.0Res tful api design tw-2.0
Res tful api design tw-2.0昀陞 李
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?臺灣塔米歐
 
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?臺灣塔米歐
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
D2 如何发现前端性能问题
D2 如何发现前端性能问题D2 如何发现前端性能问题
D2 如何发现前端性能问题aoao
 

Similar to Http协议介绍 (20)

Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overview
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
实时Web的前世今生未来
实时Web的前世今生未来实时Web的前世今生未来
实时Web的前世今生未来
 
TA Lesson Web-109
TA Lesson Web-109TA Lesson Web-109
TA Lesson Web-109
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Res tful api design tw-2.0
Res tful api design tw-2.0Res tful api design tw-2.0
Res tful api design tw-2.0
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
 
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
我想要自己架設一個網頁伺服器,我也已經有了一個固定IP,請問WF2419要怎麼設定呢?
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
D2 如何发现前端性能问题
D2 如何发现前端性能问题D2 如何发现前端性能问题
D2 如何发现前端性能问题
 

Http协议介绍

  • 1. HTTP协议介绍 一舟(@淘一舟) 淘宝-北京研发中心-UED-前端 1
  • 2. 目录 • 感性认识 • 重要概念 • 探访细节 淘宝-北京研发中心-UED-前端 2
  • 7. 关于HTTP的问题 • HTTP是什么? • 工作原理是什么? • HTTP和HTTPS的区别? • 重要的头信息有哪些,都有什么作用? • 非文本(图片、文件)是怎么传输的? • …… 淘宝-北京研发中心-UED-前端 7
  • 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. 历史版本 • HTTP/0.9 • 跨网络的简单原始数据传输,只接受 GET ,通讯中不指定版本 号,且不支持请求头,已过时 • HTTP/1.0 • 还在使用,尤其在代理服务器应用方面,RFC1945 • 通讯中指定版本号,MIME消息格式 • HTTP/1.1 • 默认持久链接,分层代理,考虑了缓存、虚拟 主机等等影响 淘宝-北京研发中心-UED-前端 9
  • 12. 动手验证 Terminal wireshark Fiddler2 • 动手练习15min时间 淘宝-北京研发中心-UED-前端 12
  • 13. HTTP与HTTPs的区别 • HTTP的安全版 • 默认使用TCP端口443 • HTTPS是两个协议的结合,即传输层SSL+应用 层HTTP • 服务器必需有PKI证书,而客户端则不一定 淘宝-北京研发中心-UED-前端 13
  • 15. 几个概念 • 1.连接(Connection):传输层的一个实际数据流, 它建立在两个相互通讯的应用程序之间。 • 2.消息(Message):HTTP的基本通讯单位。 • 3.请求(Request):一个从客户端到服务器的请求 信息包括应用于资源的方法、资源的标识符和协 议的版本号。 淘宝-北京研发中心-UED-前端 15
  • 16. 几个概念 • 4.响应(Response):一个从服务器返回的信息包 括HTTP协议的版本号、请求的状态和文档的 MIME类型,文档实体。 • 5.资源(Resource):由URI标识的网络数据对象或 或服务。 • 6.实体(Entity):数据资源或来自服务资源的回应 的一种特殊表示方法,它可能被包围在一个请求 或响应信息中。一个实体包括实体头信息和实体 本身的内容。 淘宝-北京研发中心-UED-前端 16
  • 17. 几个概念 • 7.客户端(Client):一个以发送请求为目的而建立 连接的应用程序。 • 8.用户代理(User Agent):初始化一个请求的客户 端。可以是浏览器、编辑器或其他工具。 • 9.服务器(Server):一个以接受连接并对请求返回 信息的应用程序。 淘宝-北京研发中心-UED-前端 17
  • 18. 几个概念 • 10.源服务器(Origin Server):是一个指定资源可 以在其上驻留或被创建的服务器。 • 11.代理(Proxy):一个中间程序。它可以充当服务 器,也可以充当客户机,为其它客户端建立请 求。代理经常作为防火墙。 淘宝-北京研发中心-UED-前端 18
  • 19. 几个概念 • 12.网关(Gateway):一个作为其它服务器中间媒 介的服务器。与代理不同的是,网关接受请求就 好象对被请求的资源来说它就是源服务器。 • 13.通道(Tunnel):是作为两个连接中继的中介程 序。一旦激活,通道便被认为不属于HTTP通讯。 • 14.缓存(Cache):响应信息的局域存储。 淘宝-北京研发中心-UED-前端 19
  • 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. 时间格式 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
  • 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. Request-Line Method SP Request-URI SP HTTP-Version CRLF Method SP Request-Line Request-URI SP HTTP-Version CRLF 淘宝-北京研发中心-UED-前端 24
  • 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. Method DELETE TRACE GET POST CONNECT PUT OPTIONS HEAD 淘宝-北京研发中心-UED-前端 26
  • 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. 状态码举例 • 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. 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. Message-Header-其他 Cookie X-Powered-By Set-Cookie X-Requested-With “X-”开头 淘宝-北京研发中心-UED-前端 30
  • 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. 请求的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. 响应的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. 媒体类型 Content-Type 响应 Accept 请求 Accept-Charset 淘宝-北京研发中心-UED-前端 34
  • 35. 内容编码 响应 Content-Encoding gzip x-gzip 请求 Accept-Encoding x-compress deflate compress identity 淘宝-北京研发中心-UED-前端 35
  • 36. 传输编码 Transfer-Encoding 响应 chunked 淘宝-北京研发中心-UED-前端 36
  • 37. 传输范围 Accept-Ranges 响应 Content-Range 206 200 Range 请求 淘宝-北京研发中心-UED-前端 37
  • 38. 缓存 减少请求:Expiration 性能 减少完成的请求:Validation 淘宝-北京研发中心-UED-前端 38
  • 39. 缓存失效 Expires, Date, Age 年龄计算 减少请求:Expiration 更新周期计算 是否失效:年龄-更新周期 淘宝-北京研发中心-UED-前端 39
  • 40. 缓存证实 弱证实:Last-Modified If-Modified-Since, If-Unmodified-Since 减少完成的请求:Validation 强证实:Etag (1.0不支持) If-Match, If-None-Match 淘宝-北京研发中心-UED-前端 40
  • 41. 可缓存性 理论上:除了明确指出不可缓存的以外都可以被缓存 实际上:需要服务器指定失效和证实才能被缓存 状态码是:200, 203, 206, 300, 301, 410,除非明确的禁止 可缓存性: 支持Range, Content-Range => 206 Cacheability 其他状态码都禁止,除非明确允许 淘宝-北京研发中心-UED-前端 41
  • 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. 缓存的其他话题 • 从缓存构造响应 • 缓存协商响应 • 共享和非共享缓存 • 历史和缓存的区别 淘宝-北京研发中心-UED-前端 44