一、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都有同样的“方案<scheme>://服务器位置<host> /路径<path> ”结构: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> 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服务器请求一个动作,响应报文会将请求的结果返回给客户端
<method> <request-URL> <version> <headers> <entity-body>
<version> <status> <resaon-phrase> <headers> <entity-body> 5.HTTP定义了一组安全方法,GET和HEAD方法都被认为是安全的,意味着使用GET或HEAD方法的HTTP请求都不会产生什么动作,但这是由WEB开发者决定的 6.TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子,主要用于诊断,不能带有实体的主体部分,响应的实体主体部分包含了响应服务器收到的请求的精确副本 7.OPTIONS方法请求Web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法 8.扩展方法,不是在正式规范中定义的,可能大部分服务器或客户端并不支持:LOCK、MKCOL、COPY、MOVE 9.状态码:
10.首部:
四、连接管理 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:<date>,如果指定日期之后文档被修改过了,就执行请求的方法,可以与Last-Modified服务器响应首部配合使用 5.If-None-Match:<tags>,服务器可以为文档提供特殊的标签(ETag),如果已缓存标签与服务器文档中的标签有所不同,就会执行所请求的方法 6.HTTP/1.1支持“弱验证器”,如果只对内容进行了少量修改,就允许服务器声明那是“足够好”的等价体 7.控制缓存的能力:
八、网关、隧道及中继 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: <robot-name>指定User-Agent首部;Disallow和Allow,禁止或允许访问的路径; 4.使得robot-control标签:<META NAME="ROBOTS" CONTENT="NOINDEX | NOFOLLOW | INDEX | FOLLOW | NOARCHIVE | ALL | NONE"/> 十、HTTP-NG 十一、客户端识别与cookie机制 1.HTTP首部:
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实体首部:
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首部 |
|