一、概述

从零开始构建一个真正意义的网站需要做很多事情,包括购买计算机硬件、建造机房、注册域名、购买网络带宽、开发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. 同一个电脑配置两个Git问题

    拿到公司电脑后,正常配置gitlab,以及设置邮箱等等,可以使用公司邮箱,以及一系列设置 git config --global user.name "userName" git ...

  2. SQL注入--显注和盲注中过滤逗号绕过

    SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联 ...

  3. Iterable/Iterator傻傻分不清

    区别可迭代对象和迭代器 1.判断是否可以迭代 from collections import Iterabledef fid(times): n = 0 a , b = 0,1 while n < ...

  4. 2018百度之星开发者大赛-paddlepaddle学习

    前言 本次比赛赛题是进行人流密度的估计,因为之前看过很多人体姿态估计和目标检测的论文,隐约感觉到可以用到这次比赛上来,所以趁着现在时间比较多,赶紧报名参加了一下比赛,比赛规定用paddlepaddle ...

  5. Ryu学习总结(持续更新)

    Ryu学习总结 该篇学习笔记,与其他分析Ryu控制器代码的笔记不同,主要按照程序的构成来进行分块总结,由于本人为新手入门,不能保证没有错误,如果发现错误,欢迎指教. 以下的内容主要来源: 源码 官方文 ...

  6. 深度学习论文笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of Planetary Gearboxes

    这篇文章将深度学习算法应用于机械故障诊断,采用了“小波包分解+深度残差网络(ResNet)”的思路,将机械振动信号按照故障类型进行分类. 文章的核心创新点:复杂旋转机械系统的振动信号包含着很多不同频率 ...

  7. 禁用 Python GC,Instagram 性能提升10%

    通过关闭 Python 垃圾收集(GC)机制,该机制通过收集和释放未使用的数据来回收内存,Instagram 的运行效率提高了 10 %.是的,你没听错!通过禁用 GC,我们可以减少内存占用并提高 C ...

  8. 4个数的和为0 51nod 1267

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  9. Alpha冲刺总结报告

    一.项目预期计划 允许粗糙的美工设计.由于是毫无经验的人生第一次,必定在开发过程中会遇到许多的问题,因而我们必定会花费不少时间在学习和debug上. 实现除了他山之石和规则系统以外的所有内容. 在日历 ...

  10. Jquery获取属性值

    jq获取某个标签内的属性值:$("#TeamPerformanceYearUl li:eq(0)").attr('data') jq获取li或者td第一个属性(索引值从零开始)$( ...