HTTP:Hypertext Transfer portocole,超文本传输协议。
MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后,在服务器端运行一次,运行完成后会生成HTML格式文档,把生成的文档给客户端
动态网页:包含静态内容和动态内容,动态内容部分才需运行
HTTP报文:请求报文和响应报文

请求报文语法:
          <method><request-URL><version>
          <headers>  

           <entity-body>

method:资源获取的方法;
request-URL:你请求的资源是什么;
version:对应请求资源协议的版本号
headers:HTTP的首部
entity-body:报文主体

例如:  GET / HTTP/1.1
 Host: www.magedu.com
 Connection: keep-alive

响应报文语法:
            <version> <status> <reason-phrase>
             <headers>

             <entity-body>     
version:响应的版本号
status:状态代码
reason-phrase:用于解释status的意思

例如:  HTTP/1.1 200 OK
 X-Powered-By: PHP/5.2.17
 Vary: Accept-Encoding,Cookie,User-Agent
 Cache-Control: max-age=3, must-revalidate
 Content-Encoding: gzip
 Content-Length: 6931

上面两个报文的第一行通常称作报文“起始行(start line)”;后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容。

status状态代码:
       1xx: 纯信息
       2xx: 成功类信息(例如:200)
       3xx:重定向信息(301:永久重定向、302,临时的重定向、304,没有任何改变已经被缓存)
       4xx:客户端错误类的信息(例如404)
       5xx:服务器端错误类信息(例如500)

Web服务器的主要操作

1、 建立连接——接受或拒绝客户端连接请求;
2、 接收请求——通过网络读取HTTP请求报文;
3、 处理请求——解析请求报文并做出相应的动作;
4、 访问资源——访问请求报文中相关的资源;
5、 构建响应——使用正确的首部生成HTTP响应报文;
6、 发送响应——向客户端发送生成的响应报文;
7、 记录日志——当已经完成的HTTP事务记录进日志文件;

web服务器处理并发连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

2、多进程/多线程web服务器

此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

3、I/O多路复用web服务器

为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

4、多路复用多线程web服务器

将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

代理

Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。

常用的客户端浏览器:
  IE   Firefox  Chrome Opera  Safari
服务器端:
  Apache->httpd  nginx lighttpd  thttpd
应用程序服务器:
IIS  tomcat(apache,JSP)  Websphere(IBM,JSP,commodity) Weblogic(Oracle,JSP,commodity) JBoss(RedHat)

httpd特性:
     事先创建进程:
     按需维持适当的进程
     模块块设计,核心比较小,各种功能都模块添加(包括php)
          支持运行配置,支持单独编译模块
    支持多种方式的虚拟主机配置
             虚拟主机:
      基于IP的虚拟主机:
     基于端口对的虚拟主机:
     基于域名的虚拟主机:
     支持https协议(mod_ssl)
     支持用户认证
     支持基于IP或主机名的ACL
     支持每目录的访问控制
     支持URL重写


httpd:
     /usr/sbin/httpd(多道处理模式,MPM:perfork)    
     httpd:root,root(master process)
     httpd:apche,apche(worker process)
     /etc/rc.d/init.d/httpd配置文件是/etc/sysconfig/httpd
     port:(80/tcp),(ssl:443/tcp)
     工作的根目录是/etc/httpd相当于程序安装目录
     /etc/httpd/conf:配置文件目录
      主配文件:httpd.conf
        /etc/httpd/conf.d/*.conf
     /etc/httpd/modules:模块目录是个连接
     /etc/httpf/logs-->/var/log/httpd:日志目录
      日志文件有两类:访问日志access_log,错误日志:err_log
     页面路径:/var/www目录下的
             html
      cgi-bin:动态
                    cgi:Common Gateway Interface,通用网关接口,协议
                 fastcgi:快速cgi

 

MPM:Multi path Modules多道处理模块
     mpm_winnt
 linux中支持prefork(一个请求用一个进程响应)
      worker(一个请求用一个线程响应,(启动多个进程,每个进程生成多个线程))
       event(一个进程处理多个请求)


程序是有指令和数据组成;
为了安全:
   options:一般是不允许选项的,支持[+|-]
           None;不支持任何选项
           Indexes ;允许索引目录
           FollowSymLinks:允许访问符号链接指向的原文件
           Includes:允许执行服务端包含(SSI)
          ExecCGI:允许运行CGI脚本
         ALL:支持所有选项

地址的表示方式:
      IP
   network/netnask
   HOSTNAME:www.a.com
   DOMAINNAME:magedu.com
   Partial IP:172.16=172.16.0.0、16,网段地址

Order:用于定义基于主机的访问功能的,IP,网络地址或主机定义访问控制机制
       order allow,deny
       allow from
         deny from

 例如: 192.168.0.0/24
       order allow,deny
        allow from 192.168.0.0/24 
    
        order deny,allow
        deny from 192.168.0.0/24

httpd -t 查看配置文件语法是否有错误

虚拟主机:
  先取消中心主机,只需要注释掉中心DocumentRoot即可
  物理服务器只能运行一个站点,但是虚拟主机指的是一个物理主机可运行多个站点
    Socket,IP:Port
     基于IP的虚拟主机;使用不同的IP提供不同的站点
    基于PORT的虚拟主机:使用不同的port提供不同的站点
    基于主机头的虚拟主机:使用不同的主机名提供不同的站点
    <VirtualHost IP:PORT>
         DocumentRoot "/path/to/somewhere"
        ServerName
     <Directory "/path/to/somenwhere">
  
    </Directory>
     ErrorLog log/sitel.err_log
      CustomLog logs/site1.access_log combined
     </VirtualHost> 

httpd.conf中的 AllowOverride允许覆盖 AuthConfig我需要用户密码认证才能用,AllowOverride AuthConfig的用法例子如下:


 AuthType Basic
AuthName "Restricted Files"
AuthUserFile /usr/local/apache/passwd/passwords
Require user marion

Group File Syntax:
GroupName: rbowen dpitts sungo rshersey

AuthType Basic
AuthName "By Invitation Only"
# Optional line:
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group GroupName

Require valid-user

<Directory /www/docs/private>
AuthName "Private"
AuthType Basic
AuthBasicProvider dbm
AuthDBMUserFile /www/passwords/passwd.dbm
Require valid-user
</Directory>
 

prefork和worker其实是两个与服务器联机资源有关的设定项目。 

<IfModule prefork.c>
   StartServers      8
   MinSpareServers   5
   ServerLimit      256
   MaxClients       256
   MaxRequestsPerChild   4000
</IfModule>

<IfModule worker.c>
   StartServers      4
   MaxClients       300
   MinSpareThreads  25
   MaxSpareThreads  75
   ThreadsPerChild  25
   MaxRequestsPerChild   0
</IfModule>

以Prefork为例解释一下,worker意义相同:
StartServers:代表启动Apache时就启动的进程数量。   
MinSpareServers代表最小备用进程数量
ServerLimit:服务器限制数
MaxClients:最大的同时连机数
MaxRequestsPerChild:每个进程能够提供的最大传输次数


apache跟动态内容执行环境结合的方式:
1、apache模块
2、CGI
3、FastCGI