http权威指南第五章

web服务器

  • 对多种使用不同类型软硬件的web服务器进行调查
  • 介绍如何用perl编写简单的诊断wev服务器
  • 一步一步的解释web服务器是如何处理http事务的

5.1各种形状和尺寸的web服务器

web服务器会对http请求处理并提供响应。可以是web服务器的软件,也可以是提供web页面的特定设备或计算机。

5.1.1web服务器的实现

web服务器实现了http和相应的tcp连接处理。负责web服务器提供的资源,以及web服务器的配置、控制及扩展方面的管理。

web服务器逻辑实现了http协议,管理着web资源,并负责,提供web服务器的管理功能。web服务器逻辑和操作系统共同负责管理tcp连接。底层操作系统负责管理计算机系统的硬件细节,并提供tcp网络的支持、负责装载wev资源的文件系统以及控制当前计算活动的进程管理功能。

web服务器的不同形式

  • 可以在标准的计算机系统上安装并运行通用的web服务器
  • 如果不想那么麻烦安装软件,可以买一台web服务器设备。
  • 随着微处理器奇迹般的出现,有些公司可以在少量的计算机芯片上实现嵌入式web服务器使其称为完美的消费设备管理控制台

5.1.2通用软件web服务器

通用软件web服务器都运行在标准的、有网络功能的计算机系统上。其中apache占据了60%的市场

5.1.3web服务器设备

web服务器设备(web server appliance)是预先打包好的软硬件解决方案。厂商会在他们的计算机平台上预先安装好软件服务器,并将软件配置好。

5.1.4嵌入式web服务器

嵌入式服务器(enbeded server)是要嵌入到消费类产品中的小型web服务器。有些嵌入式web服务器可以在小于一平方英寸的空间内实现。

5.2最小的perl web服务器。

...

5.3实际的web服务器会做些什么

  1. 建立连接-接受客户端的连接,或者如果不希望建立就关闭连接。
  2. 接受请求-从网络中读取一条http请求报文
  3. 处理请求-对请求方存文进行解释,并采取行动
  4. 访问资源-访问报文中指定的资源
  5. 构建响应-创建带有正确首部的http响应报文
  6. 发送响应-将响应回送给客户端
  7. 记录事务处理过程-将已完成的事务记录在一个日志中

5.4第一步-接受客户端连接

如果客户端已经打开了一条到服务器的持久连接,可以使用那条连接发送请求。否则客户端要打开一条新的到服务器的连接。

5.4.1处理新连接

客户端请求一条到web服务器的tcp连接时,web服务器会建立连接,判断另一端是那个客户端,从tcp连接中将ip地址解析出来。一旦连接建立起来并被接受,服务器就会将新的连接添加到现存的web服务器连接列表中,做好监视连接上数据传输的准备。

web服务器可以拒绝,或关闭任意一条连接。

5.4.2客户端主机名识别

可以用反向dns对大部分web服务器进行配置,以便将客户端ip转换为客户端主机名。web服务器可以将客户端主机名用于详细的访问控制和日志记录。主机名查找可能会花费很长时间,这样会减低web服务器事务处理的速度,大容量服务器会禁止主机名解析,或只允许对特定内容进行解析。

5.4.3通过ident确定客户端用户

有些web服务器支持ietf的ident协议。服务器通过ident协议发http连接的用户名。这些信息端web服务器的日志记录特别有用-流行的通用日志格式(common log format)的第二个字段中就包含了每条http请求的ident用户名。

ident可以在组织内部很好的工作,但在公共网络不能很好的工作,原因如下:

  • 很多客户端pc没有ident识别协议的守护进程
  • ident协议会使http事务产生时延
  • 很多防火墙不允许ident流量进入
  • ident协议不安全,容易伪造
  • ident协议不支持虚拟ip
  • 暴露客户端的用户名还涉及隐私问题

5.5第二步-接受请求报文

连接上有数据到达时,web服务器会从网络中读取数据,并将请求报文的内容解析出来。

  • 解析请求行,查找请求方法,指定的资源标识符以及版本号,各项用空格分隔,以回车换行结束
  • 读取以crlf结尾的报文首部
  • 检测以攒浪费结尾的标志首部结束的空行
  • 如果有的话,读取请求主体

解析请求报文,web服务器从网络上接受输入数据,网络连接可能随时出现延迟。web服务器从网络中读取数据,将部分办新闻数据临时存储在内存中,直到收到足以进行解析的数据并理解其意义为止。

5.5.1报文的内部表示法

有些web服务器会用便于进行报文操作的内部数据结构来存储请求报文。这样可以快速访问特定的首部。

5.5.2连接的输入输出处理结构

不同的web服务器会以不同的方式为请求服务

  • 单线程服务器
    一次处理一个请求,知道完成为止。效率低,性能差。
  • 多进程和多线程服务器
    以高效的多线程处理事务。可能消耗太多内存或系统资源。
  • 复用io的服务器
    同时监视所有的连接上的活动。
  • 复用多线程的服务器
    在多线程中打开连接

5.6第三步-处理请求

一旦服务器收到请求就可以根据方法、资源、首部、可选主体进行处理了。

第四步-对资源的映射及访问

web服务器是资源服务器,他们发送预先创建好的内容,比如html或则动态生成的资源。在服务器将内容传送给客户端之前,要将请求报文的url映射为服务器的内同或内容生成器,以识别内容的源头。

5.7.1docroot

web服务器支持不同类型的资源映射,最简单的资源映射形式就是用请求url作为名字访问服务器的文件系统的文件。通常服务器有一个特殊的文件夹存放web内容,称为文档根目录(document root或docroot)

1.虚拟托管的docroot

虚拟托管的服务器会在同一台web服务器上提供多个web站点,每个站点在服务器上都有自己的文档根目录,虚拟服务器根据url或host首部的ip地址或主机名识别要使用的正确文档根目录。

1.用户主目录docroot

docroot的另一个常见应用是在web服务器上为人们提供私有的web站点。通常会把以/~开始,后面跟着用户名的url映射为私有文档根目录。

5.7.2目录列表

web服务器可以接受yui个对目录url的请求,其路径可以解析为一个目录,而不是文件。可以对服务器配置,使请求目录时采取不同动作。

  • 返回一个错误
  • 不返回目录。返回一个特殊的默认“索引”文件。
  • 扫描目录,返回一个包含目录的html页面

5.7.3动态内容资源的映射

web服务器可以将url映射为动态资源。实际上,有一大类名为应用程序服务器的web服务器会将服务器连接到复杂的后端程序。

5.7.4服务器端包含项

很多服务器还提供了对服务器端包含项(ssi)的支持。如果某个资源被标志为存在服务器端包含项,服务器就回在发送给客户端之前对其资源内容进行处理。要对内容进行扫描。以查找特定的模板,取代特定的模板。这是创建动态内容的简便方式。

5.5.7访问控制

web服务器可以为特定的资源进行访问控制。比如客户端的ip或者要求提供密码。

5.8第五步-构建响应

一旦服务器识别了资源,就执行请求方法描述的动作,并返回响应报文。

5.8.1响应实体

如果事务处理产生了响应主体就将内容放在响应报文中送过去。如果有响应主体,响应报文通常包括:

  • 描述类响应主体的mime类型的content-type首部
  • 描述响应报文长度的content-length首部
  • 实际报文的主体内容

5.8.2mime类型

服务器负责确定响应主体的mime类型

  • mime类型:
    服务器可以通过文件的扩展名说明mime类型。
  • 魔法分类:
    apache服务器可以扫描每一个资源的内容,并将其与一个已知的模式表(魔法文件)匹配,以决定每个文件的mime类型。这样做很慢,但很方便,尤其文件没有标准扩展名时。
  • 显式分类:
    可以对web服务器进行配置,使其不考虑文件的扩展名或内容,强制特定文件或目录内容拥有某个mime类型。
  • 协议协商
    有些web服务器经过配置,可以以多种文档格式来存储资源。在这种请求下,可以配置web服务器,使其可以通过与用户的协商来决定使用那种格式最好。

5.8.3重定向

服务器有时会返回重定向响应而不是成功的报文。重定向响应由返回码3xx说明。location响应首部包含了内容的新地址。重定向用于以下情况

  • 永久删除的资源
  • 临时删除资源
  • url增强
  • 负载均衡
  • 服务器相关
  • 规范目录名称

5.9第六步-发送响应

web服务器通过连接发送数据有时也会面临与接受数据一样的问题。服务器可能有很多到客户端的连接。服务器要记录连接状态,还要特别注意持久连接的处理,要特别小心的计算content-length首部,不然客户端就不知道响应什么时候结束了。

5.10第七步-记录日志

当事务结束,web服务器会在日志系统添加一个条目,来描述已执行的事务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容