HTTP

web概述

Web是一种超文本信息系统,它的主要概念是超文本链接,它使得文本不会再像一本书一样固定、线性的,而是从可以从一个位置跳到另外一个位置,正是由于可以实现这种多连接性我们才把它称为web

Web服务

Web服务通常可以分为静态Web服务与动态Web服务两种

一、静动之分

1、静态Web服务是指采用静态网页对Web请求给予响应的一种方式

静态Web服务最直观的表现是,网站的Web的页面只能格式化显示电子文本,一经生成,无法改变其内容,只能更改网页文件,这样给网站的维护带来了极大不便。到了后来也就出现动态网页。

2、所谓的动态Web服务,是指跟静态Web服务相对的一种网页编程技术。相对静态网页而言,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。

而请求Web服务响应的对象,则称为客户端,在Web客户端不断的增强其信息展现能力和客户交互能力的同时,Web服务也悄悄的由静态向动态逐步发展,不断完善着。但最早的Web服务器只能响应Web客户端发送的HTTP请求,并将存储在Web服务器上的文件返回。如果要是能够根据客户的不同请求来动态的创建HTML文件,是不是会更好?基于这样的理论也就产生了CGI(Common Gate Interface,通用网关接口)技术。

二、CGI技术

CGI是用于连接网页和应用程序的接口,通过CGI的技术,可以实现在Web服务端进行数据库查询等复杂操作,并对其进行一系列操作后的数据进行封装,动态产生HTML文件响应给客户端,这为客户端和服务器端间交互动态信息起了传输纽带的作用。

wKioL1PnKFzxMjpwAAMe9GZGX4M232.jpg

三、HTTP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是分布式的Web应用的核心技术协议,该协议基于请求/响应模式,无状态,在TCP/IP协议栈中属于应用层,之所以说HTTP是无状态协议,是因为此协议一次请求和响应构成一个独立的事务,各事务间没有状态的联系。

1、客户端访问Web服务器的几个阶段

建立请求

   客户端(浏览器)使用HTTP命令(GET或POST方法)向服务器发出Web请求。(在此处需要DNS能够解析到服务器的IP地址后,通知到客户端才能知道服务器在那里)

接收连接

  服务器端接收到请求后,服务器响应该请求,并在客户和服务器之间建立连接。

处理请求

   Web服务器查找客户端所请求的资源,有两种结果:其一,资源不存在,则服务器发送一个相应的错误提示文档给客户端。

访问资源

   其二,如果Web服务器查找到所需要的资源。

构建响应

   则会将所请求的资源进行整合,并封装。

发送响应

   由服务器端发送响应到客户端

记录日志

       服务器端将资源传输到客户端后,会将事务日志处理过程记录到日志之中。

当客户端浏览资源成功后,便会与服务器断来连接。

三、HTTP各种特性

 

1、持久连接

    KeepAliva {on|off}

    MaxkeepAliveRequests 100

KeepAliveTimeout 15

   

2MPM参数:preforkworkerevent

   <Ifmodule prefork.c>

   StartServers     8  启动多少个进程

      MinSpareServer   5  最小空闲进程

   MaxSpareServer   20 最大空闲进程

   ServerLimit               256最多多少进程

   Maxclients               256最多客户端数量

   MaxrepuestsPerChild   4000  每个进程允许在其生命里处理多少个请求

  </IfModule>

3、指定监听的地址和端口

    Listen [IP:] PORT

   此指令可以重复指定多次:

4DSO机制装载的模块

    显示:

         httpd -D DUMP_MODULES

         loadModule Module_Name/path/to/module_file

5、指定站点根目录      

      DocumentRoot ”/path/to/somewhere“

6、站点路径访问控制

         基于本地文件系统路径:

      <Directory ”/path/to/somewhere“>

 

      </Directory>

         基于URL访问路径做访问控制:

       <Location "/path/to/URL"

       </location>

7、于dirctory中可用的访问控制

1Option

   Indexes:当访问的路径下无默认主页面时,将所有资源以列表的形式呈现给用户非常危险,慎用

                 FollowSymlinks:跟踪符号链接和Indexes一样

          

2 AllowOverride

   支持在每个页面下创建.htaccess用于实现对此目中资源访问时的访问控制功能。

         

8、基于IP做访问控制

        Order allowdeny

        Allow from all

                 deny在前做白名单

                 allow在前做黑名单

         rom后面能接受的地址格式:

           Ip,Network Address

           网络地址格式较为灵活:

             172.16

             172.16.0.0

             172.16.0.0/16

             172.16.0.0/255.255.0.0

 

9、定义默认的主页面

       DirectoryIndex

     越优先的越写在前面

 

10、配置日志功能

 Errorlog  /path.to.error_log       错误日志

 loglevel {dedug|info|notice|warn|error|crit|alert|emerg}          日志级别

 logformat

customlog "/path/to/access_log"logformat_Name

 

       

    %h;客户端地址

    %l:远程登录名,通常为-

    %u:认证时输入用户名,没有认证时间为-

    %t:服务器收到用户请求时间

    %r:请求报名的起始行

    %>s:响应状态码

    %b:响应报文的长度,单位是字节

    %{HEADER_NAME}i:记录指定首部对应的值

11、路径别名

    实现URL路径的映射,从而所访问的资源不再依赖于站点根目录

      Alias /URL/ ”/path/to/somewhere“

 

12、设定默认字符集

    字符集:GB2312GB18030GBK

     

    adddefaultcharset

 

13CGI脚本

    CGI脚本路径别名

    /var/www/cgi-bin/

        httpd://server/cgi-bin/

        bash脚本写CGI

          所有文本都使用命令输出:echoprintfcat

          执行程序:命令引用

       fastCGI:协议

 

14、基于用户做访问控制

    用户认证:

             基本认证:基于明文发送:basic

             摘要认证:digest

   虚拟用户:不是用于登陆操作系统用户,仅用于访问某服务或获取某资源的凭证

             文本文件:.htpasswd

             存放账号密码的地方:

             SQL数据库

                       dbm:基于文本文件存放的数据库引擎,提供API

                       ldap:轻量级目录访问协议

 

authentication provider:账号和密码的存储机制

                       authn    

                     authorizetionprovider :授权

                      案例:基于文件做访问控制

        1)基于用户进行认证

wKiom1PnJ2-jnZ3aAAECDU7D1xk762.jpg

       2)创建认证文件

 Htpasswd

-c:此文件事先不存在,则创建,注意,只能在创建第一个用户时使用

 -m:以md5的格式存储用户的密码信息

-D:删除指定用户

 

      3)组认证

              先创建用户,在创建组

wKioL1PnKKiwkwwAAADRUFxpxBM732.jpg

15、虚拟主机

      虚拟主机:使用不同的访问路径

           基于端口

           基于IP

           基于主机名

         

      1)使用虚拟主机前提,要取消主服务器

           注释主服务器的站点根路径指定:Documentroot

          

      2)定义虚拟主机

           NameVirtualhost IP:PORT2.2才有2.4没有)

           NameVirtualhost *:PORT(监听所有)

           <Virtualhost IP:PORT>

               ServerName

               DocumentRoot

               ServerAlias

               ErrorLog

               CustomLog

           </Virtualhost>

 

        配置文件语法检查:

           httpd  -t

           service httpd configtext

          

           

测试:elinks 文本游览器

      -dump:获取到页面数据后直接退出进程

 

 

16https协议

     ssl(安全的套接字层),tls(传输层安全)

     http:基于文本编码(明文)

 

        验证:使用telnet发请求(http截图)

        http协议:文本编码

 

                 验正:使用telnet发请求

 

                 # telnet 172.16.249.53 80

                 Trying 172.16.249.53...

                 Connected to 172.16.249.53

                 Escape character is '^]'.

                 GET /index.html HTTP/1.0

                 Host: www.b.org

 

                 HTTP/1.1 200 OK

                 Date: Fri, 08 Aug 2014 03:03:51GMT

                 Server: Apache/2.2.15 (CentOS)

                 Last-Modified: Fri, 08 Aug 201402:14:52 GMT

                 ETag:"e0009-12-50014c53e753f"

                 Accept-Ranges: bytes

                 Content-Length: 18

                 Connection: close

                 Content-Type: text/html;charset=UTF-8

 

                 <h1> Host B </h1>

                 Connection closed by foreignhost.   

 

httpdssl

       ssl模块

       单独成包

 

 ssl会话基于Ip地址创建,所有,每一个IP仅创建一个ssl会话

 

 ssl握手要完成的工作

     交换协议版本号

     选择双方都支持的加密方式

     客户端对服务器端实现身份验证

            密钥交换

            

            https协议:基于SSL二进制编码,443/tcp

                     openssls_client

                    

 客户端验证服务器端证书:

     有效期检测:证书是否仍然在有限期内

     CA的有效性检测:是否能解密

     证书签名检测:

     持有者的分支检测:

    

配置httpd工作于https模型:

    1、安装mod_ssl模块

        yum install mod_ssl

       

    2、为服务器生成私钥,并为其提供证书

         mkdir /etc/httpd/ssl

            

    3、配置实用https的虚拟主机

    4、重新装载配置

    5、测试

      openssl s_client -connect IPPORT -cafile /path/to/ca_certificate

 配置httpd工作于https

           (1) 安装mod_ssl模块

           # yum install mod_ssl

 

           (2) 为服务端生成私钥,并为其提供证书;

           # mkdir /etc/httpd/ssl && cd/etc/httpd/ssl

           # (umask 077; openssl genrsa -outhttpd.key 1024)

           # openssl req -new -key httpd.key-out httpd.csr

 

           签署后的证书为:/etc/httpd/ssl/httpd.crt

 

           (3) 配置使用https的虚拟主机;

           SSLCertificateFile

           SSLCertificateKeyFile

 

           <VirtualHost IP:443>

                 DocumentRoot

                 ServerName

           </VirtualHost>

 

           (4) 重新装载配置

 

           (5) 测试

           # openssl s_client -connect IP:PORT-CAfile /path/to/ca_certificate

17status页面

      httpd内嵌有handler(处理器),其中有一个handler用于输出当前httpd服务相关状态信息

 

       handlerserver-status

       启用handler要使用sethandler指令

      

          handler:当文件被调用时,apache内部的表示形式:一般每种文件类型都有隐时处理器

 

         

 18、访问属性配置总结

     配置文件系统访问路径

           <directory [~]"">

           

           </directory>

           

           <file [~]"">

           

           </file>

           

           配置URL访问路径:

       <location [~]"">

       </location>

      

       <locationmatch "">

       </locationmatch>

 

   

 19curl命令

    -A/--user-agen<string> 设置用户代理发送给服务器

       -e/--referer

        -I

     

curl命令

 

      curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET,DICT, FILELDAP等协议。curl支持HTTPS认证,并且支持HTTPPOSTPUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies用户名/密码认证,下载文件断点续传,上载文件断点续传,http代理服务器管道( proxy tunneling),甚至它还支持IPv6 socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

 

      curl的常用选项:

 

         -A/--user-agent <string> 设置用户代理发送给服务器

         -basic 使用HTTP基本验证

         --tcp-nodelay 使用TCP_NODELAY选项

         -e/--referer <URL> 来源网址

         --cacert <file> CA证书 (SSL)

         --compressed 要求返回是压缩的形势

         -H/--header <line>自定义头信息传递给服务器

         -I/--head 只显示响应报文首部信息

         --limit-rate <rate> 设置传输速度

         -u/--user <user[:password]>设置服务器的用户和密码

         -0/--http1.0 使用HTTP 1.0

     

      20、使用mod_deflate模块压缩页面优化传输速度

     

   SetOutputFilter DEFLATE

 

      # mod_deflate configuration

     

           # Restrict compression to these MIMEtypes

           AddOutputFilterByType DEFLATEtext/plain

           AddOutputFilterByType DEFLATEtext/html

           AddOutputFilterByType DEFLATEapplication/xhtml+xml

           AddOutputFilterByType DEFLATEtext/xml

           AddOutputFilterByType DEFLATEapplication/xml

           AddOutputFilterByType DEFLATEapplication/x-javascript

           AddOutputFilterByType DEFLATEtext/javascript

           AddOutputFilterByType DEFLATEtext/css

       

           # Level of compression (Highest 9 -Lowest 1)

           DeflateCompressionLevel 9

            

           # Netscape 4.x has some problems.

           BrowserMatch ^Mozilla/4gzip-only-text/html

            

           # Netscape 4.06-4.08 have some moreproblems

           BrowserMatch ^Mozilla/4\.0[678]no-gzip

            

           # MSIE masquerades as Netscape, butit is fine

           BrowserMatch \bMSI[E] !no-gzip!gzip-only-text/html

     

     

21httpd程序包自带的工具介绍  

       

        httpd

           Apache服务器程序

           

           -t:测试配置文件

           -l:列表静态模块

           -D DUMP_MODULES:列出DSO模块

           -M:相当于-t

       

         htpasswd

            为基于文件的basic认证创建和更新用户认证文件

    

         apachectl

            脚本,httpd服务器控制工具:Apache自带 

 

      abApache benchmark

        httpd的基准性能测试工具

       

      apxs

        httpd得以扩展使用第三方模块的工具

 

      htcacheclean   

        磁盘缓存清理工具

 

     htdigest

        digest认证创建和更新用户认证文件

 

     httxt2dbm

        rewrite map创建dbm格式的文件

       

     rotatelogs

        不关闭httpd而切换其使用的日志文件工具

       

     suexec

        User apache

        Group apache

       

        httpd进程需要以另外的用户的身份去访问某些资源时,可以以suexex作临时切换

       

22ab工具的初步使用

   

    同类工具:http_loadwebbenchseigeTCPcopy

 

    Usageab [options] [http[s]://]hostname[:port]/path

        -c #:模拟的并发数

        -n #:总的请求数

        -n的值一定要大于等于-c的值

         

 

23、资源限定:(# 代表数字)

      ulimit

       软限定:

         可临时超出一定时长的上限

       硬限定:

         绝对不能超出的上限

 

        管理员可使用ulimit命令临时性的修改各自资源的软限制:

           ulimit -n # :能同时打开的文件数

                  -u # :能同时启动的进程数

                 

        永久修改此限定需要修改配置文件:

             /etc/security/limits.conf

             /etc/security/limits/*.conf

            

24、编译安装httpd-2.4

     httpd-2.0       

     httpd-2.4       C7

     httpd-2.2       C6

 

      httpd程序依赖于aprapr-util                                  

               aprapache portable runtime     

                                            

      httpd-2.4的新特性:

        1MPM支持在运行时装载:

--enable-mpms-shared=all--with-mpm={prefork|worker|event}

            2、支持event mpm

            3、异步读写

            4、支持在每模块及每目录上分别使用不同的日志级别

          5、每请求的配置:<If><Elseif>

            6、增强版的表示式分析器

            7、支持毫秒级的keep alive的超时时间timeout

            8、支持基于FQDN的虚拟主机不在需要NameVirtuahome

          9、支持用户自定义变量                              

                                                 

   新增了一些模块:

             mod_proxy_fcgi,mode_reateinit,mod_request,mod_remoteip

             

   修改了一些配置机制:

             不再支持使用orderallowdeny定义基于ip的访问控制:改为require

 

    基于IP做访问控制:

         允许所有主机访问:Require all granted

         拒绝所有主机访问:Require all deny

        

    控制某特定主机的访问:

         require ip IPADDR

         require not IPADDR

        

         IPADDR:

            单个ip

             network/Netmask

             network/length172.16.0.0/16

             net172.16

            

        require host HOSTNAME

        require not HOSTNAME

       

             HOSTNAME

                FQDN:具体主机

                DOMAIN:域内的所有主机