HTTP权威指南

一、HTTP概述

1.Web服务器是Web资源(Web resource)的宿主,资源可以是静态文件或动态内容

2.MIME类型(Multipurpose Internet Mail Extension,多用途因特网邮件扩展),Web服务器会为所有HTTP对象数据附加一个MIME类型,当浏览器从服务器取回一个对象时,会去查看相关的MIME类型

3.统一资源标识符(Uniform Resource Identifier,URI),标识并定位信息资源,有两种形式:URL和URN

4.统一资源定位符(URL)是资源标识符最常见的形式

5.统一资源名(URN),作为特定内容的唯一名称使用的,与目前的资源所在地无关,很少使用

6.一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成,这种通信是通过名为HTTP报文(HTTP message)的格式化数据块进行的,包括:方法、状态码以及多个对象

7.HTTP报文是由一行一行的简单字符串组成的,分为请求报文和响应报文,包括:起始行、首部字段、主体

8.HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据

9.Web的一些结构组件:代理、缓存、网关、隧道、Agent代理

二、URL与资源

1.URL是浏览器寻找信息时所需的资源位置,是人们对HTTP和其他协议的常用访问点:一个人将浏览器指向一个URL,浏览器就会在幕后发送适当的协议报文来获取人们所期望的资源

2.大多数URL都有同样的“方案://服务器位置 /路径

”结构:

://:

@:

/

;

?#

3.Web常用方案:http、https、mailto、ftp、rtsp,rtspu、file、news、telnet

三、HTTP报文

1.HTTP报文是在HTTP应用程序之间发送的数据块,这些数据块以一些文本形式的元信息(meta-information)开头

2.HTTP使用术语流入(inbound)和流出(outbound)来描述事务处理(transaction)的方向,报文流入源商服务器,工作完成之后,会流回用户的Agent代理中

3.HTTP报文是简单的格式化数据块,每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应,由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块,以及可选的、包含数据的主体(body)部分

4.所有的HTTP报文都可以分为:请求报文(request message)和响应报文(response message),请求报文会向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端

请求报文格式:

响应报文格式:

5.HTTP定义了一组安全方法,GET和HEAD方法都被认为是安全的,意味着使用GET或HEAD方法的HTTP请求都不会产生什么动作,但这是由WEB开发者决定的

6.TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子,主要用于诊断,不能带有实体的主体部分,响应的实体主体部分包含了响应服务器收到的请求的精确副本

7.OPTIONS方法请求Web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法

8.扩展方法,不是在正式规范中定义的,可能大部分服务器或客户端并不支持:LOCK、MKCOL、COPY、MOVE

9.状态码:

100~199-信息性状态码:100 Continue(HTTP/1.1),101 Switching Protocols

200~299-成功状态码:200,201 Created,202 Accpted,203,204 No Content,205 Reset Content,206

300~399-重定向状态码:300,301 永久,302 临时,303 post重写向,304 条件请求,305 必须通过代理来访问资源,306,307

400~499-客户端错误状态码:400,401,402,403 请求被拒绝,404,405 不支持的方法,406,407,408,409,410,411,412,413,414,415,416,417

500~599-服务器错误状态码:502,503,504,505

10.首部:

通用首部:Connection、Date、MIME-Version、Trailer、Transfer-Encoding、Update、Via、Cache-Control、Pragma

请求首部:Client-IP、From、Host、Referer、UA-Color、UA-CPU、UA-Disp、UA-OS、UA-Pixels、User-Agent,Accept首部:Accept、Accept-Charset、Accept-Encoding、Accept-Language、TE,条件请求首部:Expect、If-Match、If-Modified-Since、If-None-match、If-Range、If-Unmodified-Since、Range,安全请求首部:Authorization、Cookie、Cookie2,代理请求首部:Max-Forward、Proxy-Authorization、Proxy-Connection

响应首部:Age、Public、Retry-After、Server、Title、Warning,协商首部:Accept-Ranges、Vary,安全响应首部:Proxy-Authenticate、Set-Cookie、Set-Cookie2、WWW-Authenticate

实体首部:Allow、Location,内容首部:Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type,实体缓存首部:ETag、Expires、Last-Modified

四、连接管理

1.HTTP要传送一条报文时,会以流的形式将报文数据的内容通过一条找开的TCP连接按序传输,TCP收到数据流之后,会将数据流砍成被称作段的小数据块,并将段封装在IP分组中,通过因特网进行传输

2.TCP是通过端口号来保持所有连接的正确运行的

3.HTTP紧挨着TCP,位于其上层,所以HTTP事务的性能在很大程度上取决于底层TCP通道的性能

4.在事务处理结束之后仍然保持在打开状态的TCP连接被称为持久连接,HTTP/1.1(或各种HTTP/1.0增强版)允许HTTP设备在事务处理结束之后将TCP连接保持在打开状态,以便未来的HTTP请求重用现存的连接

5.HTTP/1.0-Keep Alive连接:客户端必须发送一个Connection:Keep-Alive请求首部来激活,使用Proxy-Connection解决哑代理问题,

6.HTTP/1.1的持久连接在默认情况是激活的,除非显式使用Connection:close;HTTP/1.1停止了对keep-alive连接的支持

7.HTTP/1.1允许在持久连接上可选地使用请求管道,在响应到达之前,可以将多条请求放入队列,当第一条请求通过网络流向地球另一端的服务器时,第二条和第三条请求也可以开始发送了,在高时延网络条件下,这样做可以降低网络的环回时间;不应该用管道化的方式发送会产生副作用的请求(如POST)

8.即使在非错误情况下,连接也可以在任意时刻关闭,HTTP应用程序要做好正确处理非预期关闭的准备

9.如果一个事务,不管执行一次还是很多次,得到的结果都相同,这个事务就是幂等的

五、Web服务器

1.Web服务器做些什么:建立连接、接收请求、处理请求、访问资源、构建响应、发送响应、处理事务处理过程

六、代理

1.Web代理(proxy)服务器是网络的中间实体,代理位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文

2.单个客户端专用的代理被称为私有代理,众多客户端共享的代理被称为公共代理

3.代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点,网关扮演的是“协议转换器”的角色,即使客户端和服务器使用的是不同的协议,客户端也可以通过它完成与服务器之间的事务处理

4.代理的作用:儿童过滤器、文档访问控制、安全防火墙、Web缓存、反向代理、内容路由器、转码器、匿名者

5.代理服务器的部署:出口代理、访问(入口)代理、反向代理、网络交换代理

6.Via首部字段包含一个由逗号分隔的路标(waypoint),每个路标都表示一个独立的代理服务器或网关,且包含与那个中间节点的协议和地址有关的信息

7.TRACE方法,用户可以跟踪代理链传输的请求报文,观察报文经过了哪些代理,以及每个代理是如何对请求报文进行修改的,对代理的调试非常有用

七、缓存

1.If-Modified-Since添加到请求中去,只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象

2.缓存的处理步骤:接收、解析、查询、新鲜度检测、创建响应、发送、日志

3.通过HTTP/1.1的Cache-Control首部和HTTP/1.0的Expires首部来指定过期日期,Cache-Control:max-age=100000是相对日期,从文档第一次生成开始,Expires是绝对日期

4.If-Modified-Since:,如果指定日期之后文档被修改过了,就执行请求的方法,可以与Last-Modified服务器响应首部配合使用

5.If-None-Match:,服务器可以为文档提供特殊的标签(ETag),如果已缓存标签与服务器文档中的标签有所不同,就会执行所请求的方法

6.HTTP/1.1支持“弱验证器”,如果只对内容进行了少量修改,就允许服务器声明那是“足够好”的等价体

7.控制缓存的能力:

Cache-Control:no-store,禁止缓存对响应进行复制

Cache-Control:no-cache,可以存储在本地缓存区中,只是在与原服务器进行新鲜度再验证之前,缓存不能将其提供给客户端使用,除了与只理解Pragma:no-cache的HTTP/1.0交互时,都应该使用Cache-Control:no-cache

Cache-Control:max-age,表示从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数,还有s-maxage仅适用于共享(公有)缓存,设置为0为不缓存

Expires,指定实际的过期日期而不是秒数,不推荐使用

Cache-Control:must-revalidate,可以配置缓存使其提供一些陈旧(过期)对象,以提高性能

Cache-Control:max-stale = ,缓存可以随意提供过期的文件,如果指定了s,在这段时间内,文档就不能过期

Cache-Control:min-fresh=,至少在未来s秒内文档要保持新鲜

Cache-Control:max-age=,缓存无法返回缓存时间长于s秒的文档

Cache-Control:only-if-cached,只有当缓存中有副本存在时,客户端才会获取一份副本

八、网关、隧道及中继

1.应用程序可以(通过HTTP或者其他已定义的接口)请求网关来处理某条请求,网关可以提供一条响应

2.通用网关接口(Common Gateway Interface,CGI)是一个标准接口集,Web服务器可以用它来装载程序以响应对特定URL的HTTP请求,并收集程序的输出数据,将其放在HTTP响应中回送

3.Web隧道(Web tunnel)允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上捎带其他协议数据了

4.CONNECT方法请求隧道网关创建一条到达任意目的服务器端口的TCP连接,并对客户端和服务器之间的后继数据进行盲转发

5.HTTP中继(relay)是没有完全遵循HTTP规范的简单HTTP代理,中继负责处理HTTP中建立连接的部分,然后对字节进行盲转发

九、Web机器人

1.爬虫爬行时要避免环路

2.拒绝机器人访问标准:robots.txt文件

3.robots.txt文件:User-Agent: 指定User-Agent首部;Disallow和Allow,禁止或允许访问的路径;

4.使得robot-control标签:

十、HTTP-NG

十一、客户端识别与cookie机制

1.HTTP首部:

From:用户的E-mail地址

User-Agent:用户的浏览器软件

Referer:用户是从这个页面上依照链接跳转过来的

Authorization:用户名和密码

Client-IP:客户端的IP地址

X-Forwarded-For:客户端的IP地址

Cookie:服务器产生的ID标签

2.产生cookie的服务器可以向Set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到那个cookie

3.可以通过path属性列出的URL路径前缀下所有cookie都是有效的

十二、基本认证机制

1.HTTP原生的质询/响应(challenge/response)框架:Web应用程序收到一条HTTP请求报文时,服务器没有按照请求执行动作,而是以一个”认证质询“进行响应(返回401响应),要求用户提供一些保密信息来说明他是谁,从而对其进行质询。用户户再次发起请求时,要附上保密证书(用户名和密码)

2.基本认证:服务器可以拒绝一个事务,质询客户端,请用户提供有效的用户名和密码,服务器会返回301状态码,而不是200状态码来初始化认证质询,并用WWW-Authenticate响应首部指定要访问的安全域,浏览器收到质询时,会打开 一个对话框,用户输入用户名和密码,然后将用户名和密码稍加扰码,再用Authorization请求首部回送给服务器

3.基本认证的安全缺陷:

会通过网络发送用户名和密码,密码实际上是明文的

即使密码是以更难解码的方式加密的,第三方用户仍然可以捕获被修改过的用户名和密码

基本认证没有提供任何针对代理和作为中间人的中间节点的防护措施

假冒服务器很容易骗过基本认证

十三、摘要认证

1.摘要认证遵循的是“绝不通过网络发磅密码”,客户端不会发送密码,而是会发送一个“指纹”或密码的“摘要”,这是密码的不可逆扰码,客户端和服务器都知道这个密码,因此服务器可以验证所提供的摘要是否与密码相匹配

2.摘要认证的核心就是对公共信息、保密信息和有时限的随机值这个组合的单向摘要

3.安全问题:首部篡改、重放攻击、多重认证机制、词典攻击、恶意代理攻击和中间人攻击、选择明文攻击、存储密码

十四、安全HTTP

1.HTTPS在HTTP下面提供了一个传输级的密码安全层——可以使用SSL,也可以使用其后继者——传输层安全(Transport Layer Security, TLS)

2.数据签名是附加在报文上的特殊加密校验码

3.HTTPS没有将未加密的HTTP报文发送给TCP,它在将HTTP报文发送给TCP之前,先将其发送给了一个安全层,进行加密

4.SSL握手:交换协议版本号;选择一个两端都了解的密码;对两端的身份进行认证;生成临时的会话密钥,以便加密信道

十五、实体和编码

1.HTTP/1.1实体首部:

Content-Type,实体中承载对象的类型

Content-Length,所传送实体主体的长度或大小

Content-Language,与所传送对象最相配的人类语言

Content-Encoding,对象数据所做的任意变换

Content-Location,一个备用位置,请求时可能通过它获得对象

Content-Range,如果这是部分实体,说明它是整体的哪个部分

Content-MD5,实体主体内容的校验和

Last-Modified,所传输内容在服务器上创建或最后修改的日期时间

Expires,实体数据将要失效的日期时间

Allow,该资源所允许的各种请求访求

ETag,文档特定实例的唯一验证码

Cache-Control,指出如何缓存该文档

2.除非使用了分块编码,否则Content-Length首部就是带有实体主体的报文必须使用的,为了能够检测出服务器崩溃而导致的报文截尾,并对共享持久连接的多个报文进行正确分段

3.内容编码:gzip、compress、deflate、identity

4.传输编码,作用在实体主体上的可逆变换,与内容的格式无关,是为了改变报文中的数据在网络上传输的方式

5.Transfer-Encoding,告知接收方为了可靠地传输报文,已经对其进行了何种编码

6.TE,用在请求首部中,告知服务器可以使用哪些传输编码扩展

7.传输编码目前仅有分块编码,把报文分割为若干个大小已知的块,块之间是紧挨着发送的

8.范围请求,允许客户端实际上只请求文档的一部分,或者说某个范围

9.差异编码是HTTP协议的一个扩展,通过交换对象改变的部分而不是完整的对象来优化传输性能

十六、国际化

1.Web服务器通过在Content-Type首部中使用charset参数把MIME字符集标记发送给客户端,可以在HTML内容的的META标签指定字符集

2.Content-Language描述实体的目标受众语言,不仅限于文本文档

3.可以在Accept-Language首部中放入多个语言标记以枚举所支持的全部语言及其优先顺序

4.语言标记,第一个子标记标准化的语言记号,第二个子标记国家记号,第三个及以后没有特殊规则,如:en_us,zh_cn

5.URL编码就是对特殊字符进行ASC2的十六位编码

十七、内容协商与转码

1.内容协商,让客户端和服务器作决定发送什么内容给客户端最适合,包括客户端驱动协商、服务器驱动协商以及透明协商

2.透明协商机制试图从服务器上去除服务器驱动协商所需的负载,并用中间代理来代理客户端以使与客户端的报文交换最小化,服务器在响应中发送Vary首部,以告知中间节点需要使用哪些请求首部进行内容协商

十八、Web主机托管

1.Host首部描述了所请求的资源所在的因特网主机和端口号

十九、发布系统

二十、重定向与负载均衡

1.重定向包括:HTTP重定向、DNS重定向、任播寻址、IP MAC转发、IP地址转发(NAT)、网元控制协议(NECP)

2.代理重定向:显式浏览器配置、代理自动配置(PAC协议)、Web代理自动发现协议(WPAD、DHCP)

3.WCCP重定向,可以使路由器将Web流量重定向到代理缓存中去,WCCP负责路由器和缓存服务器之间的通信,这样路由器就可以对缓存进行验证,在缓存之间进行负载均衡,并将特定类型的流量发送给特定的缓存了

4.ICP(因特网缓存协议)允许缓存在其兄弟缓存中查找命中内容,如果某个缓存中没有HTTP报文所请求的内容,可以查明内容是否在附近的兄弟缓存中

5.CARP(缓存阵列路由协议),是ICP的一个替代协议

6.HTCP(超文本缓存协议)允许兄弟缓存之间通过URL和所有的请求及响应首部来相互查询文档是否存在,以降低错误命中的可能

二十一、日志记录与使用情况跟踪

1.通常会记录的字段:HTTP方法、客户端和服务器的HTTP版本、所请求资源的URL、响应的HTTP状态码、请求和响应报文的尺寸、事务开始时的时间戳、Referer首部和User-Agent首部

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127G07JTG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券