http协议的简单介绍

http协议:Hyper-Text Transfer Protocol,超文本传输协议; //HTML:Hyper-Text Marked Language,超文本标记语言;----静态网页 超文本:带有超连接的文本
http发展史:伯纳斯·李{1994年,伯纳斯李在MIT网络中心成立万维网中心,表明互联网诞生,伯纳斯李被称为万维网之父;}
http/0.9:只有get或put方法;http的原型版本;
http/1.0(1998年);
引入邮件中的MIME机制:Mutipurpose Internet Mail Extension,多用途互联网邮件扩展; //http有了下载功能
Cache(缓存):提升数据传输的速率;{CDN:内容分发网络}
Method:GET,PUT,POST,DELETE,HEAD,TRACE,CONNECT,OPTIONS
GET:请求获取指定的资源;
PUT:向指定的位置上传资源的最新版本;
POST:用于表单认证,在资源以后附加相关数据;
DELETE:请求服务器删除被明确标识的资源;
HEAD:与GET方法相同,都是向服务器申请获取资源,但HEAD方法仅向服务器请求响应信息的首部元信息;
TRACE:请求服务器回送所收到的请求信息;用于测试或者故障诊断;
CONNECT:保留,留待未来使用;
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项以及请求资源可使用的方法;
http/1.1(本世纪初):
强化了缓存功能;
持续链接机制:keeplive,也称持久链接,长链接;
http/2.0(2015年5月)
IETF(互联网工程任务组)结合谷歌公司开发的SPDY(speedy)插件(用来加速http传输速度和处理高并发)发布http/2.0 php

http协议的特色:
    1.典型的应用层协议;
    2.在传输层是TCP来承载的,端口号是80/TCP;
        TCP协议的特性:
            1.面向链接:
                创建链接(三次握手),维持链接稳定,拆除链接(四次挥手)
                数据序列化传输;
            2.将数据分段打包,并为每段提供CRC校验和(循环冗余校验),从而保证数据的完整性;
            3.确认机制:
            4.经过流量控制来最大利用网络资源:(利用滑动窗口来控制流量) 
            5.拥塞机制:慢启动算法+拥塞避免算法;快重传算法+快恢复算法;

http协议的工做模式:request/response模式(请求/响应 模式);
    一次完整的http事务:请求<-->响应;
    一次完整的http通讯,包括一次请求及对应于这次请求的响应;
    通讯的目的是得到服务器上的web资源,一次http请求,只能得到一次web资源;
        web资源:html文档;图片(jpg/jpeg(压缩,成像不清晰,占用空间小),gif,png(没有通过压缩处理的图片,占用空间大,可是成像质量比较高));MP3/4;PHP脚本/js脚本/css样式表;...
            web资源的分类:
                静态资源:服务器会根据客户端的请求直接将资源原封不动的响应传输给客户端的资源;{资源包括:html文档;图片(;MP3/4;PHP脚本/js脚本/css样式表;...}
                动态资源:一般是有某种编程语言编写的程序文件,在服务器上通过某种特定方式执行以后生成相应的html页面,服务器将程序运行生成的html页面响应给客户端的资源;
                    服务器端动态资源:PHP脚本,JSP脚本,.NET程序(Linux上不支持编译),python脚本,ruby脚本,C/C++程序
                    客户端动态资源(存储在服务器端,原封不动的传递到客户端,在客户端运行一遍生成一个页面);JavaScript脚本,Servlet,ActiveX
    并发响应模型: 
        单进程IO模型:仅有一个进程用于处理和响应客户端请求,每次只能处理和响应一个客户端,串行响应模型;
        多进程IO模型:同时启动多个进程,每一个进程只能处理和响应一个客户端请求;
        复用的IO模型;每一个进程能够同时处理并响应多个客户端的请求;
        多线程的IO模型;每一个进程能够生成多个线程,每一个线程能够响应一个客户端请求;
        事件驱动的IO模型:每一个进程直接处理并响应多个客户端的请求;其中采用事件通知机制;
        复用的多线程的IO模型;启动m个进程,每一个进程能够生成n个线程,每一个线程能够处理并响应一个客户端的请求;能够响应m*n个客户端;
        复用的事件驱动的IO模型:启动m个进程,每一个进程都是基于事件驱动的方式直接处理并响应多个客户端的请求;

    web服务器的一次完整的http请求的处理过程:
        1.创建TCP链接;
        2.接受请求:将客户端发送来的报文通过通讯子网的解封以后,将其放置于用户空间中相应的应用程序所在的内存空间中;
        3.分析处理请求:经过读取报文的http协议首部和body部分,获取客户端请求的资源的具体信息;
        4.访问资源:经过特定的IO方式从磁盘等IO设备上加载客户端请求的资源;
        5.构建响应报文;将加载的资源使用特定的协议予以封装;
        6.发送响应报文:将应用程序空间中的资源发给内核,加载到内存当中,转化为流式化数据,再经由硬件设备发送出去;
        7.记录日志信息;

{URI:统一资源标识符;
    web上的各类资源均可以使用URI进行统一的惟一的标识;定位资源存在的位置;
    URI包括三个部分:
        1.资源的命名机制;
        2.存放资源的主机名称;
        3.资源自身的名称;
 URL:统一资源定位符;   
    URL是互联网上用来描述web资源的定位方式的一组具备特定格式的字符串;
    URL通常有三个部分:
        1.协议:资源的提供方式和访问方式;
            可用的协议:https,http,ftp,ssh,mailto,gopher,...
        2.主机标识:可以使用主机的FQDN,也可使用IP地址;
        3.资源存放的路径:相对于主机的存放路径;使用某种特定的方式实现的映射路径,通常用于标识资源的具体位置;此路径是从根开始并标识的路径,根是web服务的根,而不是文件系统的根;
    URL通用标准格式;
        [scheme://][Username:Password@]Server[:port][/PATH/TO/RESOURCE][?PARAMETERS=VALUE&&...][#FLAG]
 资源的路径映射:
    chroot机制:
        如:将真正根文件系统上的路径假装成根文件系统,这个假装的根文件系统叫作web服务的路径
            映射web根目录的指令为:DocumentRoot /var/www/html(此路径为真正根文件系统的路径)--->web服务的资源路径(用户在客户端访问的路径)

        web服务器的资源路径的映射方式:
            1.DocumentRoot
            2.Alias
            3.VirtualHost DocumentRoot
            4.用户的docroot
            ...
}

http协议请求处理的链接方式:
    非持续链接:短链接
        在创建好的一个TCP链接上,仅能传送一个http请求报文以及一个与之匹配的响应报文;
        适用场合;用于请求单个大资源的响应报文的传送;
    持续链接;长链接(keepalive)
        能够容许客户端在一个TCP链接上发送不止一次的http请求报文,每个资源响应报文均可以基于同一个TCP链接响应给客户端;
        适用场合:用于多个小资源请求或从反向代理服务器向后端服务器请求的场景;能够避免后端服务器使用过多的进程来处理和响应客户端请求,在很大程度上能够节省服务器的资源开销;
    注意;由提供资源的服务器来决定选择哪一种链接方式

http协议的开源实现:
    实现静态资源请求的处理和响应:;
        httpd(Apache)
        Nginx(Engine X)
            Tengine(淘宝,开源)
        lighttpd
    实现动态资源请求的处理和响应:应用程序服务器;
        JSP:Tomcat,Weblogic(Oracle),Websphere(IBM),Jboss,Glassfish
        PHP:php,php-fpm
        Python:python
        Ruby:ruby

httpd:http daemon(http守护者)
由ASF(Apache软件基金会)维护,官方站点:httpd.apache.org
应用程序版本:
httpd-1.3:超级稳定,官方已经中止该版本的维护;
httpd-2:
httpd-2.2:CentOS 5/6中默认使用
httpd-2.4:CentOS 7中默认使用
httpd特性:
高度模块化:Core+Modules
DSO:Dynamic Shared Object,动态共享对象;能够实现模块的动态装载和卸载;css

模块分为两类:
            静态模块:static module,编译源代码时,直接编译至核心中的模块中;若是想要更换静态模块,则必须更换核心文件;只有在重启服务进程以后,才能生效;
            动态模块:能够基于DSO方式动态装载和卸载,改变配置操做后,仅须要重载配置文件便可生效;
                MPM:多道处理模块;用来设定httpd进程的并发响应模型;
                    prefork:多进程IO模型;
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,建立套接字,接受客户端请求并将客户端请求派发给子进程处理;
                        3.子进程处理客户端请求及构建和发送响应报文;
                        4.一个子进程仅能处理和响应一个客户端的请求;
                        5.httpd默认的MPM模块;
                    worker:复用的多进程IO模型(多进程多线程)
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,建立套接字,接受客户端请求并将客户端请求派发给子进程处理;
                        3.子进程负责管理其内部的各线程;
                        4.线程负责处理客户端请求及构建和发送响应报文;
                        5.一个线程仅能处理和响应一个客户端的请求;
                    event:复用的IO模型(事件驱动的多进程模型)
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,建立套接字,接受客户端请求并将客户端请求派发给子进程处理;
                        3.子进程处理客户端请求及构建和发送响应报文;
                        4.一个子进程能处理和响应多个客户端的请求;
                    注意:event模型在httpd2.0版以前不支持;在httpd-2.2版本中仅用做测试;只有在httpd2.4中才被定义为建议使用的模型;在CentOS 6中,经过rpm包仅能安装httpd-2.2版本,event模型是测试模型,不支持DSO动态装载和卸载;在CentOS 7中经过rpm包能安装httpd-2.4版本,event模式为“production ready”,而且支持DSO动态装载和卸载;
httpd的功能:
    1.支持CGI(Common Gateway Interface):支持客户端向执行在Web服务器上的程序请求数据
    2.虚拟主机(virtual host):
        虚拟主机的标识方式:IP + PORT + FQDN (在IP和端口号相同的状况下,只要FQDN不一样就是不一样的客户端)
    3.反向代理:Reverse Proxy (服务器接受客户端请求,自身将客户端请求修改成本身的IP地址标识后发送给后台服务器并将后台服务器返回的数据资源返回给客户端)
    4.负载均衡集群:基于流量;基于业务;基于请求
    5.路径名称的别名的设置
    6.身份验证:basic,digest
    7.支持丰富的第三方模块;

安装httpd:
    rpm包:本地光盘yum源;
    编译源代码(大规模部署安装时不推荐采用编译源代码的方式安装httpd):
        在须要定制新功能时;
        在为了安全去除带有bug或者明显漏洞的模块时;   

    CentOS 6:
        程序构成:
            httpd:主程序包
            httpd-tools:工具包
            httpd-manual:离线帮助文档
        程序环境:
            /etc/httpd/conf/httpd.conf:httpd主配置文件;
            /etc/httpd/conf.d/*.conf:片断配置文件;
            /etc/rc.d/init.d/httpd:httpd服务的启动脚本;
                /etc/rc.d/init.d/httpd start|stop|reload|restart
                servcie httpd start|stop|reload|restart 
            /etc/sysconfig/httpd:/etc/rc.d/init.d/httpd的配置文件;
            /usr/lib64/httpd/modules:动态模块的存放路径;
                /etc/httpd/modules --> /usr/lib64/httpd/modules
            /etc/httpd/conf/magic:实现MIME功能的配置文件;
            /var/log/httpd:httpd存放日志文件的路径;包括访问日志和错误日志;
                /etc/httpd/logs --> /var/log/httpd
            /var/run/httpd:存放httpd主进程PID的文件;
                /etc/httpd/run --> /var/run/httpd
            /var/www/html:默认的web站点的文档根目录的映射路径;
        可执行程序文件:
            /usr/sbin/httpd:启动MPM的prefork模型的核心程序文件;
            /usr/sbin/httpd.event:启动event模型;
            /u sr/sbin/httpd.worker:启动worker模型;
            /usr/sbin/apachectl:服务控制命令,用于启动或中止服务的命令;

    CentOS 7:
        httpd-2.4
        程序构成:
            httpd:主程序包
            httpd-tools:工具包
            httpd-manual:离线帮助文档
        程序环境:
            /etc/httpd/conf/httpd.conf:httpd主配置文件;
            /etc/httpd/conf.d/*.conf:片断配置文件;
            /usr/lib/systemd/system/httpd.service:启动服务时使用的Unit File;
                systemctl start|stop|restart|reload httpd.service
            /etc/sysconfig/httpd:/etc/rc.d/init.d/httpd的配置文件;
            /usr/lib64/httpd/modules:动态模块的存放路径;
                /etc/httpd/modules --> /usr/lib64/httpd/modules
            /etc/httpd/conf/magic:实现MIME功能的配置文件;
            /var/log/httpd:httpd存放日志文件的路径;包括访问日志和错误日志;
                /etc/httpd/logs --> /var/log/httpd
            /var/run/httpd:存放httpd主进程PID的文件;
                /etc/httpd/run --> /var/run/httpd
            /var/www/html:默认的web站点的文档根目录的映射路径;
        可执行程序文件:
            /usr/sbin/httpd:
                在httpd-2.4版本中,MPM支持DSO机制,每一个MPM模型都有一个对应的模块;
                    /usr/lib64/httpd/modules/mod_mpm_prefork.so
                    /usr/lib64/httpd/modules/mod_mpm_worker.so
                    /usr/lib64/httpd/modules/mod_mpm_event.so
            /usr/sbin/apachectl:服务控制命令,用于启动或中止服务的命令;

        设置httpd服务开机自动启动:
            CentOS 6:
                ~]# chkconfig httpd on

            CentOS 7:
                ~]# systemctl enable httpd.service

        一个简单的web站点的配置实例:
            1.安装httpd:
                yum install -y httpd httpd-manual
            2.确保SElinux和iptables防火墙不会干扰httpd服务的提供:
                SElinux配置:
                    ~]# getenforce
                    Enforcing
                    ~]# setenforce 0
                防火墙:
                    ~]# iptables -vnL
                        其执行结果中若是有防火墙规则,须要进行以下处理:
                    CentOS 6:
                        ~]# service iptables stop
                        ~]# chkconfig iptables off
                        ~]# iptables -F
                    CentOS 7:
                        ~]# systemctl disable firewalld.service
                        ~]# systemctl stop firewalld.service
                        ~]# iptables -F
                3.添加一个html文档:/var/www/html/index.html
                4.启动httpd服务
                    service httpd start (CentOS 6)
                    systemctl start httpd (CentOS 7)
                5.监测服务启动是否正常:
                    ss -tnl | grep httpd
                    ps aux | grep httpd
                    service httpd status (CentOS 6)
                    systemctl status httpd.service (CentOS 7)
相关文章
相关标签/搜索