HTTP权威指南阅读笔记 第五部分 内容发布与分发(第十八章到第二十一章)

时间:Oct. 18, 2018 分类:

目录:

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字符集注册表