520 likes | 1.3k Views
HTTP 协议. @michael2008s 20 12 - 05 -1 0. 浏览器. 关于 HTTP 的问题. HTTP 是什么? 工作原理是什么? HTTP 和 HTTP S 的区别? 重要的头信息有哪些,都有什么作用? 非文本(图片、文件)是怎么传输的? ……. HTTP 是什么?. http://zh.wikipedia.org/zh-cn/Http 无连接 /无状态 C/S 模式 Application Layer ( 类似 FTP , SMTP 等等 ) Request/Response 范式
E N D
HTTP协议 @michael2008s 2012-05-10
关于HTTP的问题 • HTTP是什么? • 工作原理是什么? • HTTP和HTTPS的区别? • 重要的头信息有哪些,都有什么作用? • 非文本(图片、文件)是怎么传输的? • ……
HTTP是什么? • http://zh.wikipedia.org/zh-cn/Http • 无连接/无状态 • C/S模式 • Application Layer(类似FTP,SMTP等等) • Request/Response范式 • RFC2616 http://tools.ietf.org/html/rfc2616 • 超文本“转移”协议
历史版本 • HTTP/0.9 • 跨网络的简单原始数据传输,只接受 GET ,通讯中不指定版本号,且不支持请求头,已过时 • HTTP/1.0 • 还在使用,尤其在代理服务器应用方面,RFC1945 • 通讯中指定版本号,MIME消息格式 • HTTP/1.1 • 默认持久链接,分层代理,考虑了缓存、虚拟主机等等影响
工作原理是什么? • http://www.cnpaf.net/Class/HTTP/200408/81.html
HTTP与HTTPs的区别 • HTTP的安全版 • 默认使用TCP端口443 • HTTPS是两个协议的结合,即传输层SSL+应用层HTTP • 服务器必需有PKI证书,而客户端则不一定
重要概念 • 1.连接(Connection):一个传输层的实际环流,它建立在两个相互通讯的应用程序之间。 • 2.消息(Message):HTTP通讯的基本单位。 • 3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。
重要概念 • 4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态和文档的MIME类型。 • 5.资源(Resource):由URI标识的网络数据对象或服务。 • 6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
重要概念 • 7.客户机(Client):一个为发送请求目的而建立连接的应用程序。 • 8.用户代理(UserAgent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。 • 9.服务器(Server):一个接受连接并对请求返回信息的应用程序。
重要概念 • 12.网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器。 • 13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯。 • 14.缓存(Cache):响应信息的局域存储。
URL 协议类型 端口 查询参数 大小写不敏感 为空即默认 不安全的字符和%HEXHEX相同 http://www.g.cn:80/s/search?q=淘宝UED&btnG=GCN+搜索 主机 路径和查询 http://abc.com:80/~smith/home.html htTP://ABC.com/%7Esmith/home.html http://ABC.com:/%7esmith/home.html
时间格式 Sunday, 06-Nov-94 08:49:37 GMT Sun Nov 6 08:49:37 1994 Sun, 06 Nov 1994 08:49:37 GMT
HTTP-Message (Request-Line | Status-Line) *(message-header CRLF) CRLF [ message-body ] (Request-Line | Status-Line) HTTP-Message *(Message-Header CRLF) CRLF [ Message-Body ]
Request-Line Method SP Request-URI SP HTTP-Version CRLF Method SP Request-URI SP Request-Line HTTP-Version CRLF
Status-Line HTTP-Version SP Status-Code SP Reason-Phrase CRLF HTTP-Version SP Status-Code SP Status-Line Reason-Phrase CRLF
Method DELETE GET TRACE POST CONNECT PUT OPTIONS HEAD
Status-Code 服务器错误 301 4.. 101 202 重定向 204 404 503 信息 300 305 客户端错误 206 500 100 201 200 403 504 302 501 304 417 4.. 400 203 205 303 502 505 307 306 成功 402 401
状态码举例 • 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”)
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 实体
Message-Header-其他 Cookie X-Powered-By Set-Cookie X-Requested-With “X-”开头
重要的HTTP头… Host Server Date User-Agent Location Expires Accept Content-Type Last-Modified Accept-Charset Age Accept-Encoding Content-Encoding ETag Referer Cache-Control
请求的Header举例 • Accept:请求希望服务器能响应何种表现格式。 • Accept-Encoding:告诉服务器可以接收何种压缩格式传输,以减少带宽。 • Range:请求获得一个资源的部分表示,常与If-Unmodified-Since一起用。 • If-Modified-Since:通过前一次响应Last-Modified的时间值,当条件不成立,请求成功返回。 • If-Match:通过前次响应ETag值,当条件不成立,请求成功返回。 • If-Range:通过前次响应的ETag或Last-Modified值,若请求部分变化,服务器需返回新的范围。 • Authorization:按特定认证方案编码的用户名和密码证书,服务器接收验证通过执行请求。
响应的Header举例 • Accept-Ranges:表明支持部分Get请求,客户端通过Head请求获取该值,然后发送Range报头请求,获取资源部分表示。 • Content-Encoding:对应Accept-Encoding请求报头。 • Content-Language:实体主体采用的自然语言,对应Accept-Language请求报头,可能多个值。 • Content-Length:给出实体主体大小,客户端可据此做读取准备,也可通过Head请求来获知。 • Content-Location:把请求资源的规范URI告知客户端,但并不要求其使用新URI。 • Content-MD5:实体主体MD5,可检测错误损坏。
媒体类型 Content-Type 响应 Accept 请求 Accept-Charset
内容编码 Content-Encoding 响应 gzip x-gzip 请求 Accept-Encoding x-compress deflate compress identity
传输编码 Transfer-Encoding 响应 chunked
传输范围 Accept-Ranges 响应 Content-Range 206 200 请求 Range
缓存 减少请求:Expiration 性能 减少完成的请求:Validation
缓存失效 Expires, Date, Age 年龄计算 减少请求:Expiration 更新周期计算 是否失效:年龄-更新周期
缓存证实 弱证实:Last-Modified If-Modified-Since, If-Unmodified-Since 减少完成的请求:Validation 强证实:Etag (1.0不支持) If-Match, If-None-Match
可缓存性 理论上:除了明确指出不可缓存的以外都可以被缓存 实际上:需要服务器指定失效和证实才能被缓存 状态码是:200, 203, 206, 300, 301, 410,除非明确的禁止 可缓存性: Cacheability 支持Range, Content-Range => 206 其他状态码都禁止,除非明确允许
缓存控制 Cache-Control
缓存控制 对失效: s-maxage, max-age, min-fresh, max-stale 缓存控制: Cache-Control 对证实: only-if-cached, must-revalidate, proxy-revalidate, no-transform 对可缓存性: public, private, no-cache, no-store
缓存的其他话题 • 缓存协商响应