一、http(HyperText Transfer Protocol,超文本传输协议) 是应用最为广泛的一种网络协议,说有的www文件都遵守这个标准
1、URI和URL
URI:统一资源标识符,唯一的标识,规范也可以理解为一种协议
URL:统一资源定位符,能够定位互联网上的某一个独特的资源
   例如:
        http://192.168.0.1/index.html
       协议://服务器地址[:端口]/路径
      指定协议后,端口号就是用默认的端口号,也可以不用指定
      路径是相对于地址的路径,和本地路径可能会不同

 例如:
      服务器上的工作目录在 /var/www/html/ 有个index.html文件
      在服务器上打开的话是 cat /var/www/html/index.html
      服务器的ip是192.168.0.1,客户端访问的话就是 http://192.168.0.1/index.html
      所以我们访问的话只能在/var/www/html下访问,就相当于这个服务的根,像/etc/fstab就没法访问的到
 
      /var/www/html/ 下有个目录 bbs/wget.php  访问的话就是 http://192.168.0.1/bbs/wget.php
 
2、http请求状态
http协议是一种无状态的协议:叫 stateles:无状态
指的是http的一次请求和其他请求没有关系,如下请求过程:
(1)首先客户端先与服务器建立tcp3次握手建立连接
(2)客户端请求所需资源
(3)服务器响应客户端的请求,传输资源
(4)最后tcp4次断开
互联网上的web页面有很多资源组成的,因此就要多次握手断开,就造成的了资源浪费
所以之后就有了 keepalive:保持连接
keealive的区别在于,获取资源后不会断开,而是继续获取资源,避免了重复的三次握手四次断开,但是这种机制的副作用是请求一个资源后不再请求第二个资源就一直占用服务器的系统开销,所以我们要有个则中的方法,就是设定keepalive的超时时间,这里的超时指的是空闲超时,但是当有人恶
意请求时,我们可以定义最大请求个数,强制断开

3、资源获取的方式:
GET:获取,纯粹的请求传输
HEAD:获取http首部
 curl -I http://192.168.0.1/index.html
 
POST:提交表单
PUT:上传   
DELETE:删除
PUT,DELETE通常基于webDAV,但一般不开放
4、http协议状态码:
1XX: 纯粹说明信息
2XX:正常响应信息
3XX:url重定向信息
4XX:服务器端错误,暂时性错误
5XX:永久错误

5、动态网站:根据客户端的不同请求,服务器会根据不同请求返回不同请求的机制
客户端请求时不再是html的文件了,而是脚本语言或其他语言写成的程序代码,当用户请求代码是,服务就将程序代码运行下,并将结果返回给客户端,而程序代码需要运行环境的,和服务器是两码事,所以当程序执行后如何返回给web服务器? 这是就有了CGI。
           
CGI:Common Gateway Interface (通用网关接口),让web服务器和WEB程序建立关系的通道。

6、能够开发动态网站的程序:
    编译型:
           C,C++
    解释型:
           bash,perl,python
           php,嵌入的方式写在html文档中
          asp.net C#
          jsp
常用的web服务器软件,Apache,Microsoft,Nginx,Google
可以通过 www.netcraft.com来查询各个web软件的使用情况,在图中可以开出apache市场份额非常高,而nginx也是个新贵,至于Microsoft么,你懂得。
 
二、apache
apache不止是web服务器,也是一个软件基金会,官方网站
http://httpd.apache.org/
apache是个高度模块化的,把许多的都做成模块,需要的话就添加,不用就卸载,可以看下他的模块:

 
1、Apache的特性:
     (1)几乎可以运行在所有的计算机平台上。
     (2)支持最新的HTTP/1.1协议。
     (3)简单而且强有力的基于文件的配置(HTTPD.CONF)。
     (4)支持通用网关接口。
     (5)支持虚拟主机。
     (6)支持HTTP认证。
     (7)集成PERL。
     (8)集成的代理服务器。
     (9)可以通过WEB浏览器监视服务器的状态,可以自定义日志。
     (10)支持服务器端包含命令(SSI)。
     (11)支持安全SOCKET层(SSL)。
     (12)具有用户会话过程的跟踪能力。
     (13)支持FASTCGI。

2、apache 的MPM
MPM:多道处理模块,当并发多个请求时web如何响应请求,
       worker:每一个请求用一个线程响应
            线程是进程的子单位,在进程内部有多个执行流
            线程共享同一个进程的数据
      prefork:每一个请求用一个进程响应
            MaxSpare 最大空闲
            MixSpare 最小空闲
            MaxClients 70 响应个数
     默认使用prefork

3、apache安装
这里先用rpm安装,直接就用yum安装了
# yum -y install httpd
会在/etc/rc.d/init.d/httpd 所以可以通过server 来启动服务
默认的页面在/etc/httpd/conf.d/welcome.conf配置的
默认的网页存放路径在/var/www/html/下
# echo "This is server" > /var/www/html/index.html 
  
注意:要以.html结尾
主配置文件是/etc/httpd/conf/httpd.conf ,要养成习惯配置前先备份一下
#cp httpd.conf httpd.conf.bak
看下配置文件的分段如下,默认虚拟主机是没开启的

4、配置文件中的MPM
# httpd -l //列出自身的模块

如下表示如果启动prefork.c 模块就使用<IfModule prefork.c>和</IfModule>容器之间的配置
<IfModule prefork.c>
   StartServers       8                       起始启动进程个数   
   MinSpareServers    5                  最小进程
   MaxSpareServers   20                最大进程
   ServerLimit      256                     MaxClients  有效进程最多能响应多少请求
   MaxClients       256                    最大同时在线请求个数
   MaxRequestsPerChild  4000      每一个子进程最多能响应多少请求
</IfModule>
worker.c的已经说过是以线程响应的

如果想改成worker模式的话,编辑vim /etc/sysconfig/httpd,去掉如下行的注释,重启服务即可
#HTTPD=/usr/sbin/httpd.worker
5,定义端口
修改httpd.conf配置文件中的Listen 80 即可,可以使用多次,也可以指定IP,不指定IP 默认是0.0.0.0,增加个Listen 8080 重启服务,这里可以看到以及有8080了

6、安装apache 模块,配置文件中增加如内容即可
LoadModule 模块名称   模块路径
这里的模块路径是相当路径,相对于ServerRoot 指令定义的服务器工作位置

这里还有个Include conf.d/*.conf,意思是包含所有在/etc/httpd/conf.d/*.conf配置文件的指令
      Timeout 120                TCP超时时间
      KeepAlive On             启用保持连接
      KeepAliveRequests      最大请求资源
      KeepAliveTimeout 15   超时时间秒单位

7、apache支持每目录的属性
<Directory />
    Options FollowSymLinks              选项
    AllowOverride None                    是否允许覆盖
</Directory>
这里的<Directory />定义的本地的文件系统路径
常见的Options:
              Indexes                             没有默认页面是否显示下面的页面  
              FollowSymlinks                 是否跟踪符号连接
              AllowOverride None         密码访问
定义服务器识别的目录默认主页
DirectoryIndex index.html index.html.var
8、指定网页文件所在位置
DocumentRoot "/var/www/html"
这里http支持测试,可以用# httpd -t来测试配置文件是否有错误 或# service httpd configtest

9、简单访问控制的实现
           Order allow,deny
           Allow form all
 Order allow,deny  这里表示的次序,先allow后deny,deny是默认的配置规则allow是明确指定的规则
 Allow form all   这里是允许所有,可以指定网段Allow from 192.168.0.0/24,可以指定多个

10、日志格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

自定义日志个数   combined 表示使用上面的combined的日志格式
CustomLog logs/access_log combined
11、路径别名
这里比如默认httpd的DocumentRoot "/www/html"
访问http://192.168.0.1/forum/是 /www/html/forum/index.html
这里的index.html 是DirectoryIndex定义的
所以这里访问的forum实在/www/html下的子目录的格式,这里要所得别名是forum不在/www/html下
比如定义个别名目录是/web/forum/index.html 而 /www/html下没有forum
配置文件中添加
Alias /forum /web/forum  表示当访问http://192.168.0.1/forum/时不是/www/html/forum/index.html而是/web/forum/index.html
AliasMatch 表示可以使用正则表达式匹配

12、CGI路径别名,这里定义的是当访问cgi时候不只有别名并且apache还知道是CGI脚本的目录

ScriptAlias /cgi /web/cgi-bin

13、认证访问
认证访问的三种方式
    basic认证                           这里传输方式都是明文的
    摘要认证   md5 sha1          并不被太多浏览器支持,用的少
    表单认证
<Directory "/www/html/soft">
   Options none
   AllowOverride AuthConfig                      //指定使用要密码认证
   AuthType Basic                                      //认证方式
   AuthName "Restrice"                              //名称,只是认证时候显示
   AuthUserFile /etc/httpd/conf/.htpasswd   //存放用户的账号密码,和系统的不一样(这里.开头表示是隐藏文件)
   Require valid-user                                  //这里表示所有的,而Require User redhat表示.htpasswd中的redhat能登录
</Directory>

之后建立文件
# htpasswd -cm /etc/httpd/conf/.htpasswd redhat
建立文件并指定redhat用户(第一次加-c选项,之后就不用再加-c 选项,-c选项表示第一次创建文件)

也可以指定组的
AuthGroupFile /etc/http/conf/.htgroup
Require Group mystuffs

组文件格式
vim /etc/http/conf/.htgroup
mystuffs:gentoo

14、还有基于htdbm机制的
# htdbm -c -m /etc/httpd/conf/stuff.dbm suse
<Directory "/www/html/soft">
 Options none
 AllowOverride AuthConfig
 AuthType Basic
 AuthName "Restrice"
 AuthBasicProvider dbm
 AuthDBMUserFile /etc/httpd/conf/stuff.dbm
 Require valid-user
</Directory>
 浏览器输入地址,要求输入用户名密码,这里以basic认证做的,所以有显示会以明文传送
输入用户名密码后显示内容