httpd 属于C/S架构,基于套接字实现进程间通信


回顾一下进程间的通信
IPC :Inter Process Communication 进程间通信
同一主机进程间通信依靠:信号、旗语、shm、Unix Sock
跨主机的进程间通信依靠:rpc、socket



1 、套接字和C/S模型


   Unix Sock :服务器和客户端属于同一机器上,通过Unix Sock 文件系统实现通信

   Socket    :服务器和客户端不属于同一机器,通过IP地址和port端口实现进程间通信

               由目标端口、目标ip地址、源端口、源ip地址组成完整的进程间通信



          (1)用户进程和内核之间  应用层和通信层之间


       

    wKioL1MpEziyLLn8AACAKFJyTLc022.jpg

         

   

套接字类型:Tcp套接字、UDP套接字 、raw套接字


   http:C/S  

      通信子网:传输

      应用层协议:应用 (http、https、smtp、pop、imap、ftp、ldap)

     

      Client:

           GUI(图形界面):IE、Firefox、Safari、chrome、Opera

           CLI(命令行):elinks、curl

      Server:

            httpd、nginx、lighttpd、gws

       App Server:

            IIS、tomcat、jetty、resin        

2、http和html

   2.1 http (hypertext trasport protocol 超文本传输协议)

 

       http协议:是一种stateless 无状态协议,一次http事务结束后,
                 连接即行断开
       http协议的版本
           http/0.9  仅用于传输html文档
           http/1.0  支持多媒体数据的处理
           http/1.1  更多的请求方法,更精细的缓存控制,持久链接
       http协议加速方式
           并行请求
           持久连接(限定请求次数;限定访问时间)

     

   

  2.2 html (hypertext mark  language 超文本标记语言)

     

     ①URI Uniform Resource Idenfitier 统一资源标识符

        URL Uniform Resource Locator  统一资源定位符,属于URI的一个子集

       

        例如:http://www/jungege.com:80 /p_w_picpaths/game.gif

              http 协议

              www.jungege.com:80 主机

             /p_w_picpaths/game.gif  资源路径,属于相对路径

     ② MIME Multipurpose Internet Mail Extension 多用途多功能网页邮件拓展,基于base64


     ③ client:Browser      浏览器

        server:http server  http服务器


     ④ html文件内容格式

         <html>

           <head>

             <title>

             </title>

           </head>

           <body>

             <h1></h1>

             <p></p>

             <h2></h2>

              <p>  <a href="a.html" >abc </a>  </p>

           </body>

        </html>

   

     ⑤css :cascading style sheet 层叠样式表


     ⑥CGI:common gateway interface 公共网关接口


     ⑦一个页面中可能会包含多个页面对象


3、http报文


    http 事务(一次请求以及与其对应的响应)


        wKioL1MpHmuzF_feAAC2tyburTQ893.jpg

   

    http方法:GET、PUT、HEAD、POST、DELETE



        3.1  HTTP请求(request)

               HTTP请求报文格式:

               <method> <request-URL> <version>

               <headers>

                空白行

               <entity-body>


        3.2   HTTP响应(response)

               HTTP响应报文格式

               <version> <status> <reason-phrase>

               <headers>

                空白行

               <entity-body>


                        报文格式参数

                        <method>: 请求方法, 希望服务器端执行的动作,如GET、HEAD、POST等

                        <request-url>: 请求的资源,可以是相对路径,也是完整的URL
                        <version>:协议版本,格式HTTP/<major>.<minor>,如http/1.1
                        <headers>:HTTP首部
                        <status>: 状态码
                        <reason-phrase>:原因短语,数字状态码易读信息
                        <entity-body>: 主体部分


        (一)  首部 <headers>

                    格式: Name:Value

                        例如:Content-type:p_w_picpaths/game.gif

                    分类:通用首部、请求首部、响应首部、实体首部、拓展首部

                           

                           ①通用首部:请求和相应都可以使用

                                 格式:

                                     Connection:定义C/S之间关于请求/响应的有关选项
                                     Connection: keep-alive
                                                   Via: 显示了报文经过的中间节点
                                     Cache-Control: 缓存指示

                                           Pragma


                           ②请求首部

                                   格式:

                                       Client-IP:

                                       Host: 请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
                                       Referer:指明了请求当前资源的原始资源的URL
                                       User-Agent: 用户代理,使用什么工具发出的请求

                                ②① Aonccetp首部:y用户表明客户自己更倾向于支持的能力                      

                                         

                                                Accept: 指明服务器能发送的媒体类型
                                                Accept-Charset: 支持使用的字符集
                                                Accept-Encoding: 支持使用的编码方式
                                                Accept-Language: 支持使用语言

                                ②②  条件请求首部  :  


                                                   Expect:
                                                   If-Modified-Since: 是否在指定时间以来修改过此资源

                                                   If-None-Match

                               ②③  跟安全相关的请求首部:

                                       

                                                   Authorization: 客户端提交给服务端的认证数据,如帐号和密码
                                                   Cookie: 客户端发送给服务器端身份标识
                                                   Cookie2


                        ③ 响应首部

                                       格式:

                                       Age:时间

                                       Server:向客户端表明服务器程序名称和版本

                                 

                                ③① 协商首部

 

                                                   Accept-Ranges: 对当前资源来讲,服务器所能够接受的范围类型
                                                   Vary: 首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端

                                ③② 跟安全相关的响应首部


                                                   Set-Cookie: 服务器端在某客户端第一次请求时发给令牌

                                                   Set-Cookie2:
                                                   WWW-Authentication: 质询,即要求客户提供帐号和密码


                        ④ 实体首部        

                                  Location: 资源的新位置

                                  Allow: 允许对此资源使用的请求方法

                              ④① 内容首部

                                       

                                                   Content-Encoding
                                                   Content-Language
                                                   Content-Length
                                                   Content-Location
                                                   Content-Range
                                                   Content-Type

                             ④② 缓存首部

                   

                                                   ETag: 实体标签
                                                   Expires: 过期期限
                                                   Last-Modified: 上一次的修改时间

                                           

                               

               (二) HTTP请求方法        

                           安全的方法:GET、HEAD
                           POST
                           PUT、DELETE、OPTIONS、TRACE、
                           扩展方法:LOCK、MKCOL、COPY、MOVE
               
                           GET:请求获取一个资源,需要服务器发送
                           HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部;
                           POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器                                            存储至某位 置(例如发送处理程序)
                           PUT:与GET相反,向服务写入文档;例如发布系统
                           DELETE:请求删除URL指向的资源
                           OPTIONS:探测服务器端对某资源所支持的请求方法
                           TRACE:跟踪请求要经过的防火墙、代理或网关等

                       

                     


                (三) HTTP报文状态码<status>

                           1xx: 信息性状态码

               
                           2xx:成功状态码
                                   200: OK
                                   201: Created
                           3xx:重定向状态码
                                   301:Moved Permanently, 在响应报文中使用首部“Location: URL”指定资源现在所处的                                                 位 置;
                                   302:Found, 在响应报文中使用首部“Location: URL”指定临时资源位置;
                                   304:Not Modified, 条件式请求中使用;
                           4xx:客户端类的错误
                                   403:Forbidden,请求被服务器拒绝
                                   404:Not Found,服务器无法找到请求的URL
                                   405:Method Not Allowed,不允许使用此方法请求相应的URL
                           5xx:服务器类的错误
                                   500:Internal Server Error,服务器内部错误;
                                   502:Bad Gateway,代理服务器从上游收到了一条伪响应;
                                   503:Service Unavailable,服务器此时无法提供服务,但将来可能可用;

                   

4、一次Web请求的基本过程

         

       建立连接
       接收请求
       处理请求
       访问资源
       构建响应 (封装报文)
       发送响应
       记录日志 (产生磁盘I/O)

                 wKiom1MpKP_DdJnQAAFW4HGN-Wc727.jpg


5、 Web服务器输入/输出结构:

       

单线程I/O结构
多线程I/O结构
复用的I/O结构:单个线程响应多个请求
复用多线程I/O结构:多个线程,每个线程响应多个请求



6、httpd (又名apache)

              apache:a pachey server


    6.1 httpd的高度模块化

           core + modules   内核+模块

           DSO: Dynamic Shared Object  动态加载模块

           MPM: Multipath Processing Module  多道处理模块(并非一个模块,而是对一种特性的称呼)


                  prefork 模块:一个进程一个请求;由主进程提前生成多个空闲的进程来应对即将到来的用户请求

                                         主进程--->空闲子进程

                  worker 模块: 一个进程多个线程,一个线程对应一个请求;由主进程生出若干子进程,每个子进程

                                         再生出多个线程   主进程--->若干子进程---->N个线程

                  event   模块: 一个线程响应多个请求,由事件驱动(evendriven)实现单线程响应多个请求

                                         

    6.2  httpd版本

                 httpd-1.3

                 httpd-2.0

                 httpd-2.2

                 httpd-2.4


    6.3  httpd 功能特性

                 

                   路径别名: alias
                   用户认证:authentication
                   虚拟主机:virtual host
                   反向代理:访问一个服务器时,反馈的是一个代理服务器,此代理服务器代理的是原服务器
                             负载均衡属于反向代理
                   用户站点:用户在其独自的目录空间中实现网站

                   CGI:Common Gateway Interface 公共网关接口


     6.4  安装httpd

             

# yum -y install httpd

 

    6.5  httpd 服务器脚本  运行目录  配置文件  

       

                   服务脚本:/etc/rc.d/init.d/httpd
                       脚本配置文件:/etc/sysconfig/httpd
                   运行目录:/etc/httpd
                   配置文件:
                       主配置:/etc/httpd/conf/httpd.conf
                       扩展配置:/etc/httpd/conf.d/*.conf
                   Socket: 80/tcp, 443/tcp
                   文档根目录:/var/www/html

                   CGI目录:/var/www/cgi-bin/


    6.5 配置文件

               

          /etc/httpd/conf/httpd.conf
           配置参数    值
               配置指令不区分字符大小写
               值有可能区分字符大小写
               有些指令可以重复出现多次
               例如:Listen [IP:]80
           配置文件格式:
               全局配置
               主机配置:用于仅提供一个站点时
               虚拟主机:用于提供多个站点时
           配置文件语法测试:
               # service httpd configtest
               # httpd -t

           ####绝大多数配置修改后,可以通过service httpd reload来生效;

           ####如果修改了监听的地址或端口,必须重启服务service httpd restart才能生效.


      6.6 httpd日志文件

               wKiom1MpMrnxS4c3AACTlE7qIyg551.jpg

           

                    日志滚动:
                       日志切割
                       access.log,
                       access.log, access.1.log
                       access.log, access.1.log, access.2.log

                               

     

  技术有限,望路过的大神指点;

PS: 后续会推出httpd配置文件的详细讲解,敬请期待~