zoukankan      html  css  js  c++  java
  • 1、WEB服务器概述

    一、基本的HTTP服务器

    1、简介

    对于一个服务器应用程序,有四方面的内容是需要了解:

    客户端、服务器端、客户端与服务器端的协议,服务器端能够提供的资源

    客户端  通过HTTP协议发送URI 到服务器端,

    服务器端 通过HTTP协议返回响应内容 给客户端

    2、HTTP服务器功能

    根据客户端请求,响应本地文件或者使用本地应用程序(即CGI程序)生成响应内容,返回给客户端

    一个WEB服务器的基本内部流程如下:

    (1)初始化:即启动服务器程序,启动时向运行主机请求将端口80作为服务器端口

    (2)请求——响应循环:

    1)等待并接受一个客户端请求

    2)对请求进行检查

    3)将请求的URL映射为特定的文件(存在则返回给客户端,不存在则返回错误)

    以上是最简单的过程,实际一个成熟的WEB服务器还需包括以下多种功能

    (1)完整实现HTTP/0.9,HTTP/1.0,HTTP/1.1协议

    (2)能够处理并发请求,支持多进程或多线程

    (3)提供开发接口,允许增加额外功能

    (4)实现服务器安全机制

    (5)动态内容生成(允许通过CGI,脚本语言和服务器段包含SSI生成动态WEB页面)

    (6)支持虚拟主机

    (7)支持代理功能

    (8)允许根据MIME类型协商选择合适的返回资源

    管理角度还需考虑:

    (1)7*24小时运行的健壮性和稳定性

    (2)易配置型

    (3)用户可以在不停止服务器的情况下修改配置

    (4)易管理性,管理员可以通过辅助工具对服务器进行有效的管理

    (5)丰富的日志

    3、WWW文档

        WEB服务器上的文档是以层状或树形结构进行组织的。

        HTML中的超链接使用文档名来指向对应的信息,链接可以是完整的文档名字(绝对名称:www.server.org/there/xx.html),或当前文档的名字(相对名称:./xx.gif)。相对名称通常用于内嵌的图像。一般一个html文档所包含的各个部分都在同一地方。

        但是,WEB文档树并不能真实反映Web文档的组织结构。web文档的实际组织结构有三种最重要的形式:

    (1)所有文档位于同一台机器上,构成一棵树

    (2)文档分布于不同的机器上,相互之间没有形成镜像

    (3)文档在不同的机器上形成镜像

    4、工作方式(WEB服务器的工作原理及步骤)

    (1)等待客户请求:侦听一个端口

    (2)客户请求到来:客户浏览器发送ASCII字符串(请求)到服务器,WEB服务器将请求读入内存

    (3)接受客户请求:WEB服务器对请求按照HTTP协议进行解码来确定进一步的动作,涉及内容包括:方法(GET),客户端所请求的文档,及浏览器使用的协议

    (4)读取其他信息:WEB服务器根据需求去读取请求的其他部分信息(用于描述浏览器及其能力的元信息)

    (5)完成请求的其余动作:WEB服务器在其文档树中搜索请求的文件Index.html

    查找成功:文件将被发送出去,首先发送一个响应码及一些描述信息,再读取磁盘文件输出到网络

    处理失败:返回错误提示信息

    (6)关闭文件和网络连接,结束会话

    二、Apache功能

    完全实现http0.9,1.0,1.1。及协议中没有的内容:比如虚拟主机。各基本功能如下:

    1、虚拟主机

    虚拟主机是指在一个机器上运行多个Web站点的机制

    虚拟主机的实现包括以下三种方式:

    (1)“基于IP”技术:web服务器中配置多个IP地址,并且每一个逻辑Web服务器使用一个IP地址。

      优点:最简单

      缺点:扩展性不好,一台机器所能存在的物理IP地址有限。

              IP地址个数有限

    (2)“基于端口”技术:web服务器只有一个IP地址,不同的web服务器使用不同的端口进行侦听。

    缺点:用户必须显式给出正确的请求端口

    (3)“基于HOST域”技术:web服务器只有一个IP地址,同时多个域名被映射到该IP地址上。

    所有web服务器侦听同一个端口,根据http请求中的Host域对请求进行区分(http1.1以上才具备)。

    Apache支持以上的三种方式的虚拟主机,并可通过mod_vhost_alias模块对类似的虚拟主机进行配置

    2、内容协商

         Apache对于同一个文档可能会保存多个不同的版本,如何选择最适合给定用户的版本,有两种办法进行客户端和服务器端资源的协商:

         它们可以单独或混合使用。混合使用中有一种叫“透明的协商方法”,可在缓冲使用由初始服务器提供的代理驱动协商信息,为后续的请求提供服务器驱动协商发生时,使用该方法。

    (1)服务器端驱动的内容协商

           即对需要发送到客户端的具体文档版本由服务器端决定。

           通过使用“Accept”请求域字段,客户端会提供一系列的它能够接受的格式列表,根据这个域,服务器会选择最适合客户端的内容。

           服务器的选择可能会基于语言、内容编码、请求消息中特殊报文字段的内容,及隶属于请求的其他信息(比如IP地址)

    优点:服务器想和第一个应答一起把它的“最佳猜测”发送给客户端时比较好

    缺点:1)不能准确判断最佳协商

            2)客户端在请求中描述自己能力的效率很低

            3)使得初始服务器的实现及对请求生成应答的算法变得复杂

            4)可能会限制一个公共缓存的能力,使其对多个用户的请求使用同样的应答。

    Accept-XXX都是用于协商

    (2)客户端驱动的内容协商(由浏览器完成)

    3、持续连接

    持续连接:就是某个连接在打开后不立即关闭,而是继续使用,后续的数据传输都基于该连接

         为了使用持续连接,客户端和服务器之间都会使用“Connection:keep_alive”请求域(默认情况下连接就是持续连接),除非进行了特殊的指定

         使用“Connection:close”关闭使用持续连接。

          Apache提供配置指令,允许限制在同一连接上的处理请求的数目,以及处理超时的时间,一旦超过该处理时间,连接就将关闭。

    4、缓存

           在分布式架构下,可以使用缓存应答的方式改善系统的性能,从而加快对客户端的响应速度。

           HTTP1.1中缓存的设计目标是在很多情况下降低发送请求的必要性,以及降低发送完整应答的必要性。

    降低发送请求:使用过期机制实现,从而减少所需要的网络回合

    降低发送完整应答:使用验证机制实现,从而减少网络带宽需求

         HTTP1.1中相关的缓存字段:

    (1)Expires:声明一个网页或URL地址不再被浏览器缓存的时间

    (2)Cache-Control:可以声明多个元素,用来指明页面被缓存的最大时限,如何被缓存的,如何被转换到另一个不同的媒介的,以及如何被存放在持久媒介的。

    (3)Last_Modified:是条件请求相关的两个字段,用于验证请求询问服务器页面是否已经更改。可避免重复发送文件给浏览器,不过仍然会有HTTP协议请求。

           一般纯静态页面本身都会有Last-Modified信息,Apache会读取页面文件中的Last-Modified信息,并添加到HTTP响应头部

           对于动态页面,如果在页面内部没有通过函数强制加上Last-Modified,Apache会把当前时间作为Last-Modified返回给浏览器。

           无论是纯静态页面还是动态页面,FireFox浏览器都巧妙的按照接受到服务器响应的时间设置缓存页面的Last-Modified。

    (4)ETag:用于提供更加严格的验证。  

        Apache会在默认情况下,对所有静态、动态文件的响应头添加ETag字段,在httpd.conf文件中可以通过FileETag指令配置该选项。

        FileETag指令配置了当文档基于一个文件时用以创建ETag响应头的文件的属性。

        在多台负载均衡的服务器环境下,同一个文件会有不同的ETag或文件修改日期,浏览器每次都会重新下载。

    5、访问控制和安全

       通过认证、授权和访问控制(AAA模块)的一系列安全措施,可以确保受控资料的安全

    (1)访问控制

       只有一个模块实现了访问控制

    (2)认证

       包括两种:基本认证和摘要认证

    (3)授权

      Apache通过解析全局及本地配置文件.htaccess来决定用户的授权身份。

    6、动态内容的生成

      一个Web服务器最简单的功能就是将存放于服务器上的静态的HTML文件发送给客户端。

      Apache提供了动态生成页面的功能:

      (1)使用CGI脚本:Web服务器执行一个外部应用程序,用以解释脚本代码并且返回执行输出后的HTML至Web服务器,再转发给客户端

      (2)使用额外的模块来支持脚本语言(例如mod_perl):脚本语言通过上下文环境解释它,脚本模块为脚本语言提供执行环境和允许脚本访问脚本以外数据的API

      服务器端脚本分两类:

    1)支持嵌入脚本的HTML文件:比如:asp,php等文件,脚本被包含到特定标签中,被脚本引擎模块识别,执行后再输出为HTML文本,并将原有脚本替换。

    2)完全由程序生成的HTML文档:主要是两种:CGI程序(C、C++或perl程序),Java servlets程序

  • 相关阅读:
    [算法]外部排序
    [笔试]华为编程大赛题目
    [C++]字符串处理方法(STL与C风格)
    如何动态建立VFP能够打开的中文字段 dbf 表 北极星
    使用 VCL BDE 组件动态创建数据库表 北极星
    如何用Table控件判断数据库是否为空 北极星
    DNGuard HVM副产品(元数据名称编辑器)
    常见dotNet加密保护工具分析介绍
    DNGuard HVM 试用版 RC1 发布
    [转载]Modifying IL at runtime
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1747156.html
Copyright © 2011-2022 走看看