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程序

  • 相关阅读:
    Different AG groups have the exactly same group_id value if the group names are same and the ‘CLUSTER_TYPE = EXTERNAL/NONE’
    An example of polybase for Oracle
    use azure data studio to create external table for oracle
    Missing MSI and MSP files
    You may fail to backup log or restore log after TDE certification/key rotation.
    Password is required when adding a database to AG group if the database has a master key
    Use KTPASS instead of adden to configure mssql.keytab
    ardunio+舵机
    android webview 全屏100%显示图片
    glide 长方形图片显示圆角问题
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1747156.html
Copyright © 2011-2022 走看看