一、概述

从零开始构建一个真正意义的网站需要做很多事情,包括购买计算机硬件、建造机房、注册域名、购买网络带宽、开发Web服务器软件、管理网站内容等等。在互联网发展的早期,构建网站的这一系列动作通常都是由单个组织独自完成的。

在互联网已成主流的今天,很多人都想拥有一个自己的网站,但很少人具备构建网站的技能或时间。这一多一少的反差,直接催生了大量专业的机构和公司,它们根据用户(个人或企业)需求程度的不同,提供不同级别的网站构建服务:从仅仅提供硬件设施,到提供全站式服务(此时用户只需要提供网站内容即可)。

这些构建网站所需的一系列动作统称为Web托管(Web Hosting),而那些提供Web托管服务(Web Hosting Services)的机构和公司则称为Web托管服务提供商(Hoster)

共享Web托管分为专用托管(又称专用主机,Dedicated Hosting)和虚拟托管(又称虚拟主机,Virtual Hosting)两种方式。

二、专用主机

在专用主机中,一个网站独占一个Web服务器。

不同网站使用不同的Web服务器,而不同Web服务器具有不同的因特网IP地址,因此用户对不同网站的访问完全是相互独立的。

三、虚拟主机

在虚拟主机中,多个网站共享同一个Web服务器。

1. 缺乏主机信息的问题(Virtual Server Request Lacks Host Information)

例如两个网站A(域名为http://www.a.com)和B(域名为http://www.b.com)共享同一个Web服务器H(从而DNS服务器会将A和B的域名映射到同一个因特网IP地址),则用户访问站点A或B时,最终都会把请求发给同一个Web服务器实体:

  • 访问http://www.a.com/index.html时,含有“GET /index.html”的HTTP请求将会被发给Web服务器H
  • 访问http://www.b.com/index.html时,含有“GET /index.html”的HTTP请求将会被发给Web服务器H

显然,当Web服务器H收到同样的“GET /index.html”请求时,并没有足够的信息让它判断被访问的站点到底是A还是B。

问题的关键就在于HTTP请求中不包含主机信息。由于HTTP/1.0在设计之初认为一个Web服务器只会托管一个网站(即专用主机的应用场景),所以去掉了URL中稍显冗余的主机名(hostname),导致HTTP请求的URL中就只含有路径部分(path component)。HTTP/1.0的这种假设和处理显然无法应付虚拟主机的应用场景,

2. 让虚拟主机正常工作(Making Virtual Hosting Work)

为了解决上述问题,以下四种技术方案(workarounds)应运而生:

  • 添加特殊的URL路径(URL path)

给不同站点添加不同的路径前缀。例如对于站点A:原来的http://www.a.com/index.html变成了http://www.a.com/a/index.html,对应的URL请求则变成了“GET /a/index.html”;对于站点B:原来的http://www.b.com/index.html变成了http://www.b.com/b/index.html,对应的URL请求则变成了“GET /b/index.html”。

缺点:1)主机名www.a.com中有“a”,路径中也有“a”,既显得冗余又让人迷惑;2)访问站点的一般规则被打破了,输入http://www.a.com或http://www.a.com/index.html无法访问该站点的首页。

  • 指定不同的端口号

给不同站点指定不同的端口号。例如站点A使用80端口,站点B使用82端口。

缺点:打破了HTTP协议的默认端口号是80的规则,可以想象用户不能通过http://www.b.com甚至http://www.b.com:80访问站点B,却必须使用http://www.b.com:82时会有多么恼火。

  • 指定不同的IP地址

Web服务器上绑定多个IP地址,并给不同站点指定不同的IP地址。例如网站A使用209.172.34.3,网站B使用209.172.34.4。当用户访问http://www.a.com时,经过域名解析后,实际会与209.172.34.3建立TCP链接,并发起HTTP请求,Web服务器就可以根据目的IP(209.172.34.3)来识别出被访问的站点(即网站A);类似地,用户访问http://www.b.com时,Web服务器发现目的IP为209.172.34.4,从而得知被访问是站点B。

缺点:1)Web服务器所在的单个计算机通常只能绑定有限个数的IP地址,如果一个Web服务器打算托管成百上千的站点,那就只能打消这个算盘了;2)因特网的IP地址是个昂贵而又稀缺的资源,使用过多的IP地址很烧钱并且还不只是钱的问题。

  • 协议新增支持主机头部(Host headers)

在HTTP/1.0+中扩展引入了主机头部(Host headers),在HTTP/1.1中更是明确规定了HTTP请求中需要包含主机头部(Host headers)。主机头部给出被访问的站点或资源所在的因特网主机名和端口号:Host = "Host" ":" host [ ":" port ]

例如访问站点A(http://www.a.com/index.html)的HTTP请求如下:

GET /index.html HTTP/1.1
              User-Agent: SuperBrowser v1.3
              Host: www.a.com

          访问站点B(http://www.b.com/index.html)的HTTP请求如下:

GET /index.html HTTP/1.1
              User-Agent: WebSurfer 2000
              Host: www.b.com:80

缺点:无。此为终极方案。

四、更可靠的网站(Making Web Sites Reliable)

1. 服务器集群(Server Farm or Server Cluster)

服务器集群是指大量内容相同、功能等效、相互可替换的Web服务器。(相关定义可参考维基百科

服务器集群中的服务器一般分为主服务器(Master servers or Primary servers)和备份服务器(Replica servers or Backup servers)。主服务器故障时,备份服务器可以作为替换,主/备服务器与负载均衡器(Load balancer)一起配合可以实现负载均衡(Load balancing)。

服务器集群中的主/备服务器可以部署在同一个位置(集中式),也可以分布在不同的地方(分布式)。集中式的主/备服务器之间的互连和切换通常由交换机(Network switch)来完成;分布式的主/备服务器由互联网连接,相互之间的切换可以通过HTTP重定向(HTTP redirection)或DNS重定向(DNS redirection)来实现。

2. 内容分布式网络(Content Distribution Network, CDN)

内容分布式网络的应用有反向代理缓存服务器(Surrogate Cache)和代理缓存服务器(Proxy Cache)等。(相关定义可参考维基百科内容分布式网络说明

【读书笔记】《HTTP权威指南》:Web Hosting的更多相关文章

  1. [读书笔记] CSS权威指南2: 结构和层叠

    层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...

  2. [读书笔记] CSS权威指南1: 选择器

    通配选择器 可以与任何元素匹配,就像是一个通配符 /*每一个元素的字体都设置为红色*/ * { color: red; } 元素选择器 指示文档元素的选择器. /*为body的字体设置为红色*/ bo ...

  3. [读书笔记]Hadoop权威指南 第3版

    下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...

  4. 《软件测试自动化之道》读书笔记 之 底层的Web UI 测试

    <软件测试自动化之道>读书笔记 之 底层的Web UI 测试 2014-09-28 测试自动化程序的任务待测程序测试程序  启动IE并连接到这个实例  如何判断待测web程序完全加载到浏览 ...

  5. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  6. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

  7. 【读书笔记】iOS-使用Web Service-基于客户端服务器结构的网络通信(一)

    Web Service技术是一种通过Web协议提供服务,保证不同平台的应用服务可以互操作,为客户端程序提供不同的服务. 目前3种主流的Web Service实现方案用:REST,SOAP和XML-RP ...

  8. 【读书笔记】iOS网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

  9. 读书笔记之深入分析Java Web技术内幕

    章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统 ...

  10. 【读书笔记】iOS-网络-Web Service协议与风格

    协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...

随机推荐

  1. stl源码分析之priority queue

    前面两篇介绍了gcc4.8的vector和list的源码实现,这是stl最常用了两种序列式容器.除了容器之外,stl还提供了一种借助容器实现特殊操作的组件,谓之适配器,比如stack,queue,pr ...

  2. 「Leetcode」14. Longest Common Prefix(Java)

    分析 与其说是算法题,不如说是语言特性题. 这题要是对Java的String相关函数掌握的比较熟练,写起来的速度(各种意义上)就会很快. 大致的思路都是一致的,差不到哪里去,无非是枚举长度.值得一提的 ...

  3. CentOS 下 Java 的下载、安装、配置

    CentOS 下 Java 的下载.安装.配置 系统: CentOS 7 x86_64 Java 版本: 1.8.0_171 本文将 Java 目录放在 /usr/local/java 文件夹下,读者 ...

  4. php文章tag标签的增删

    <?php session_start();   if($_POST){           $_SESSION['old']=array('one','two','three','four', ...

  5. VPS挂机赚美刀详细介绍–Alexamaster操作流程

    跟 vps 主机打交道时间长了,手里也渐渐积累了些闲置的 vps.让它们这么闲着吧,感觉有些浪费资源:用起来吧,暂时又没有好的项目.一直听说通过 vps挂机可以赚回主机成本,甚至可以盈利.正好这两天有 ...

  6. SQL判断是否存在

    判断数据库是否存在 ifexists(select*frommaster..sysdatabaseswherename=N’库名’) print’exists’ else print’notexist ...

  7. Scrum立会报告+燃尽图(十月二十日总第十一次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  8. static块的本质

    在网上看到了下面的一段代码: public class Test { static { _i = 20; } public static int _i = 10; public static void ...

  9. 团队Alpha冲刺(二)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...

  10. 安装Ubuntu 16.04双系统详解(Nvidia显卡)

    Ubuntu16.04双系统安装 一.准备工作 设备:惠普台式机,i5-7400.8G内存.1T机械硬盘.NVIDIA GTX1050显卡.预装系统:Win10. 1.下载ubuntu镜像文件,本人使 ...