【读书笔记】《HTTP权威指南》:Web Hosting
一、概述
从零开始构建一个真正意义的网站需要做很多事情,包括购买计算机硬件、建造机房、注册域名、购买网络带宽、开发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的更多相关文章
- [读书笔记] CSS权威指南2: 结构和层叠
层叠样式表中最基本的一个方面可能就是层叠——冲突的声明要通过这个层叠过程排序,并由此确定最终的文档表示.这个过程的核心是选择器及其相关声明的特殊性,以及继承机制. 特殊性 对于每个规则,用户代理会计算 ...
- [读书笔记] CSS权威指南1: 选择器
通配选择器 可以与任何元素匹配,就像是一个通配符 /*每一个元素的字体都设置为红色*/ * { color: red; } 元素选择器 指示文档元素的选择器. /*为body的字体设置为红色*/ bo ...
- [读书笔记]Hadoop权威指南 第3版
下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...
- 《软件测试自动化之道》读书笔记 之 底层的Web UI 测试
<软件测试自动化之道>读书笔记 之 底层的Web UI 测试 2014-09-28 测试自动化程序的任务待测程序测试程序 启动IE并连接到这个实例 如何判断待测web程序完全加载到浏览 ...
- 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序
读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...
- HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)
1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是c ...
- 【读书笔记】iOS-使用Web Service-基于客户端服务器结构的网络通信(一)
Web Service技术是一种通过Web协议提供服务,保证不同平台的应用服务可以互操作,为客户端程序提供不同的服务. 目前3种主流的Web Service实现方案用:REST,SOAP和XML-RP ...
- 【读书笔记】iOS网络-Web Service协议与风格
协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...
- 读书笔记之深入分析Java Web技术内幕
章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统 ...
- 【读书笔记】iOS-网络-Web Service协议与风格
协议指的是在与其它系统交换结构化信息时所要遵循的一套格式,过程与规则.此外,协议定义了在传输过程中所要使用的数据格式.这样,接收系统就能正确地解释结构化信息并做出正应的回应. 1,简单对象访问协议. ...
随机推荐
- Linux TCP/IP调优参数 /proc/sys/net/目录
所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...
- 04-JVM内存模型:直接内存
1.1.什么是直接内存(Derect Memory) 在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的 ...
- Jmeter性能测试使用记录
使用背景 由于最近公司要求对一批接口做性能测试,所以重拾了一些对于Jmeter的使用,现将部分过程做记录,以便以后回溯. 接口参数化 数据参数文件使用了excel保存出的csv文件,dat格式的文件也 ...
- Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音
mario jumper 在线测试地址:http://www.ifiero.com/uploads/phaserjs3/jumper/ 空格键:轻按:跳低 ,长按:跳高键盘:--> 向右 , ...
- Python登录,输入三次密码
第一段python代码,写了一天,总算不报错了,值得纪念. 基本要求: 写一个登录界面,登录三次锁定用户 1. 包含一个用户信息文件,用户名和密码 2.黑名单文件 过程: 1.先检查是否在黑名单中,如 ...
- 第五章—if语句
5-1 条件测试 :编写一系列条件测试:将每个测试以及你对其结果的预测和实际结果都打印出来.你编写的代码应类似于下面这样: car = 'subaru' print("Is car == ' ...
- 《Learning scikit-learn Machine Learning in Python》chapter1
前言 由于实验原因,准备入坑 python 机器学习,而 python 机器学习常用的包就是 scikit-learn ,准备先了解一下这个工具.在这里搜了有 scikit-learn 关键字的书,找 ...
- kettle_Spoon 修改共享DB连接带汉字引发的错误
win10下: kettle_Spoon 修改共享DB连接带汉字引发的错误: Unexpected problem reading shared objects from XML file : nul ...
- redis 常用命令 结合php
这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型.list类型和set类型的数据,需要的朋友可以参考下 redis的操作很多的,以 ...
- 20181016-4 Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 05
作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2288 Scrum master:王硕 一.小组介绍 组长:王一可 组员:范 ...