HTTP权威指南阅读笔记 第五部分 内容发布与分发(第十八章到第二十一章)
目录:
18 Web主机托管
18.1 主机托管服务
对于web托管,顾客只需要提供内容,机房提供服务器,带宽等
18.2 虚拟主机托管
可能因为流量不大等原因,可以进行虚拟主机托管,很多项目实际上都是由一台服务器提供的服务
18.2.1 虚拟服务器请求缺乏主机信息
对于虚拟主机,需要将请求转发到相对应的虚拟网站,对于HTTP/1.0并没有提供相关的解决方案
18.2.2 设法让虚拟主机托管正常工作
服务器需要根据请求提供的信息来进行转发到对应的虚拟网站
- 通过URI路径 问题如果用户修改URI可以获取其他网站的内容
- 通过端口号 问题用户不希望在URL中看到非标准端口号
- 通过IP地址 问题是IP地址有限
- 通过Host首部 在HTTP/1.0+支持
18.2.3 HTTP/1.1的Host首部
语法
Host: host [":" port]
如果没有Host可能就会被转到默认的站点或者返回一个400的错误
对于没有虚拟主机,并且不允许资源随请求的主机变化的原始Server来说,可以忽略Host首部,如果认为是变化的,则可以忽略的为请求的URL为绝对URL,不过貌似现在的服务器都是遵循这个
18.3 使网站更可靠
网站不能正常运作的模式
- 服务器宕机
- 请求拥堵
- 网络中断
18.3.1 镜像的服务器集群
当某个服务器出现问题可以顶上,并且可以在不同的地域等
Client导向的方式为HTTP重定向和DNS重定向
18.3.2 内容分发网络
就是CDN
18.3.3 CDN中的反向代理缓存
复制原始Server可以使用反向代理缓存来代替,和镜像服务器集群的区别是方向代理缓存是需求驱动的,不会保存原始Server的所有副本,并且可以提供预取功能,可以将热点提前载入
18.3.4 CDN中的代理缓存
与反向代理缓存不同的是,传统的代理缓存能收到任何发往任何Web Server的请求
?不太理解
18.4 让网站更快
- 服务器集群
- 分布式代理缓存(cdn)
- 反向代理服务器
- 分发内容更接近Client
19 发布系统
19.1 FrontPage为支持发布而做的服务器扩展
FrontPage是微软公司提供的web写作和发布工具包
19.1.1 FrontPage服务器扩展
这个扩展被称为FPSE协议,对HTTP协议进行扩展但是不改变语义
更多的略
19.2 WebDAV与协作写作
WebDAV分布式写作和版本管理
19.2.1 WebDAV的方法
WebDAV定义了一些新的HTTP方法并修改了HTTP方法的操作范围,新增方法
- PROPFIND 获取资源属性
- PROPPATCH 在一个资源上设定一个或多个属性
- MKCOL 创建集合
- COPY 从指定源端把资源或者资源集合复制到指定目的地,目的地可以为另一台机器
- MOVE 从指定源端把资源或者资源集合移动到指定目的地,目的地可以为另一台机器
- LOCK 锁定一个或多个资源
- UNLOCK 将先前锁定的资源解锁
还有修改DELETE,PUT和OPTIONS方法
19.2.2 WebDAV与XML
请求和响应的局限性造成了首部不能正常完成一些功能,借助XML来完成
更多操作就略掉了,包括LOCK,UNLOCK,PROPFIND,PROPPATCH和MKCOL等
目前很多的方式都可通过GET和POST来实现,不过现在一般都会对WebDAV进行了支持
20 重定向和负载均衡
- HTTP重定向
- DNS重定向
- 任播路由
- 策略路由
- IP MAC转发
- IP地址转发
- WCCP(Web缓存协商协议)
- ICP(缓存间通信协议)
- HTCP(网元控制协议)
- CARP(缓存阵列路由)
- WPAD(Web代理自动发现协议)
20.1 为什么要重定向
HTTP程序需要做三件事,重定向是普通存在
- 可靠地执行HTTP事务
- 最小化时延
- 节约网络带宽
重定向可以在一个位置出了问题后还有其他可用,如果Client能访问较近的资源也可以更快的收到所请求的内容,以降低响应时间,将目标服务器分散,减少网络拥堵等
由于重定向和负载均衡是共存的,大多数重定向都包含了某些形式的负载均衡,可以将报文的负载分摊到一组服务器
20.2 重定向达到何地
Client向目标Server发送HTTP请求,目标对其进行处理,Server,Proxy,Cache和getway对Client来说都是服务器,重定向都可以转发到这些节点上
20.3 重定向协议概览
重定向的目的是尽快将HTTP报文发送到可用的服务器,但是报文传输会受到HTTP应用程序和报文经由的路由设备影响
- 配置创建Client端报文的浏览器应用程序,使其将报文发送给不同的代理服务程序
- DNS解析选择报文寻址的IP地址,对于不同地域可能会有不同的IP地址
- 报文经过网络传输时,会被划分为一些带有寻址IP地址的分组,交换机和路由器会检查分组中的TCP/IP地址,来划分发送路线
- Web服务器可以重定向到其他服务器
机制 | 工作方式 | 重新路由的基础 | 局限性 |
---|---|---|---|
HTTP重定向 | HTTP请求到第一台Server,Server选择最佳的Web Server | 重定向的选择很多 | 可能会很慢,因为需要多个事务,并且第一台一定要能处理请求 |
DNS重定向 | DNS服务器决定URL的主机名中返回那个IP地址 | 选择DNS寻址IP的算法rr,最小化时延等 | 需要配置DNS服务器 |
任播寻址 | 几台Server使用相同的IP,其他路由器会将共享的IP地址分发到最近的服务器 | 路由器有内建的最短路径和路由功能 | 已经建立的TCP连接可能因为路由断掉而断掉 |
IP MAC地址转发 | 交换机将服务器或代理MAC地址赋予分组 | 节省带宽,提高QOS,负载均衡 | Server或代理的跳距必须是1 |
IP地址转发 | 在四层对目的地址和端口重定向到分组IP地址 | 节省带宽,提高QOS,负载均衡 | Server和Proxy可能看不到真实的Client IP |
显式浏览器配置 | 配置Web浏览器,将HTTP报文发送到附近的一个代理或者缓存 | 节省带宽,提高QOS,负载均衡 | 取决于浏览器配置能力 |
代理自动配置(PAC) | Web浏览器根据配置Server中解析PAC文件后使用对应代理 | 节省带宽,提高QOS,负载均衡 | 必须配置浏览器,使其去查询配置Server |
Web Proxy代理自动发现协议(WPAD) | Web浏览器向配置Server查询一个PAC文件的URL,与单独使用的URL不同,不需要将浏览器配置为使用特定的配置服务器 | 配置Server,将URL建立与Client端HTTP请求首部提供的信息之上 | 只有副本浏览器支持 |
Web缓存协调协议(WCCP) | 路由器会评估一个分组的目的地址,并用代理或镜像服务的IP地址将重定向分组封装起来,可以与很多现有路由器共同工作,进而使ClientIP不会丢失 | 节省带宽,提高QOS,负载均衡 | 必须支持WCCP协议的路由器 |
因特网缓存协议(ICP) | 代理缓存那个会在一组兄弟代理缓存中查询请求结果 | 从代理缓存内容比原始Server快 | 请求内容只使用URL,降低缓存命中率 |
缓存分组路由协议(CARP) | 一种代理缓存散列协议,允许缓存将请求转发给父缓存,与ICP不同的是,内容不相交 | 从附近对等高速缓存获取比原始Server快 | CARP无法支持兄弟关系,CARP的配置需要一致,否则会向不同的父代理Cache发送URL,降低命中率 |
超文本缓存协议(HTCP) | 参与的代理缓存可以像一组兄弟缓存查询所请求的内容 | 从兄弟代理或父代理获取内容比原始Server快 |
20.4 通用的重定向方法
20.4.1 HTTP重定向
示例请求
GET /blog/ HTTP/1.1
Host: blog.whysdomain.com
User-Agent: Mozilla/5.0
响应是一个302的重定向报文
HTTP/1.1 302 Redirect
Server: Openresty
Location: http://47.91.219.253/blog/
然后浏览器再度发起请求
GET /blog/ HTTP/1.1
Host: 47.91.219.253
User-Agent: Mozilla/5.0
20.4.2 DNS重定向
文中提供了DNS重定向的方法,但是主要问题就是要指定DNS并且还受TTL的影响
20.4.3 任播寻址
新兴实验性技术
20.4.4 IP MAC转发
略
20.4.5 IP地址转发
就是NAT网络地址转换,而交换机需要做的就是对称路由。
- 将分组的源IP地址改成交换机的IP地址,被称为完全NAT,不过会隐藏Client的真实IP地址
- 如果源IP地址仍是Client的IP地址,就要确保没有从Server到Client的直接路由,被称为半NAT,缺点是要对Client和Server之间的整体网络有某种程度的控制
20.4.6 网元控制协议
略
20.5 代理重定向
略
20.6 缓存重定向
略
20.7 因特网缓存协议
略
20.8 缓存阵列路由协议
略
20.9 超文本缓存协议
略
21 日志记录与使用情况跟踪
主要为了跟踪使用情况,安全性,计费,错误监测等
21.1 记录内容
目的就是查找Server或是代理中存在的问题或者站点访问的统计信息
统计数据可以对市场运营,计费和容量规划都非常有作用
Server可以将整个报文获取,整个事务流程记录,但是我们不需要记录那么多的数据,一般示例字段
- HTTP方法
- Client和Server版本
- 请求资源的URL
- 响应HTTP状态码
- 请求和响应报文尺寸
- 事务开启时间和关闭时间
- Referer首部和User-Agent首部
URL和方法更多能反应请求试图做什么,版本信息更多提供了一些非预期交互的提示,状态码则反应了事务的执行情况,请求响应等可以用于记账,统计
21.2 日志格式
21.2.1 常见日志格式
略
21.2.2 组合日志格式
- Referer
- User-Agent
21.2.3 网景扩展日志格式
略
21.2.4 网景扩展日志格式2
略
21.2.5 Squid代理的日志格式
略
21.3 命中率测量
由于Cache了,会造成有些请求到了Cache而没有到后端Server,造成后端日志不全的问题
21.3.1 概述
命中率测量协议定义了一种HTTP协议扩展,提供了基本的功能,Cache和Server可以实现这些功能来共享访问信息,规范已缓存资源的可用次数
21.3.2 Meter首部
示例执行命中率测量实例,在请求过程中加入Meter首部和来自服务器的响应,Server要求代理发送使用报告,之后定期发送报告
21.4 关于隐私的考虑
注意保护终端用户的隐私
附录
- URL方案
- HTTP状态码
- HTTP首部参考
- MIME类型
- Base-64编码
- 摘要认证
- 语言标记
- MIME字符集注册表