与http协议相关的基础知识

相关的内容:http概念、版本、工作模式、web资源、开源实现(动、静态资源请求与响应)、httpd的特性、httpd功能、httpd的程序环境


http协议:
    Hyper-Text Transfer Protocol,超文本传输协议;

    HTML:Hyper-Text Marked Language,超文本标记语言;



http的版本:0.9,1.0,1.1

    0.9:最原始的版本

        功能:

            Method:GET,PUT;

    1.0:

        功能:

            MIME:Multipurpose Internet Mail Extensions,多用途互联网邮件扩展;
            Cache:缓存;CDN
            Method:GET,PUT,POST,DELETE,HEAD,TRACE,CONNECT,OPTIONS;
                GET:请求获取指定的资源;
                PUT:向指定的位置上传资源的最新版本;
                POST:用于实现表单认证,在资源之后附加相关数据;
                DELETE:请求服务器删除被明确标识的资源;
                HEAD:与GET方法相同,都是向服务器申请获取资源,但HEAD方法仅向服务器请求响应消息的首部元信息;
                TRACE:请求服务器回送收到的请求信息;用于测试或者故障诊断;
                CONNECT:保留,留待将来使用;
                OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项以及请求资源可以使用的方法;

    1.1:

        功能:

            延续了1.0的功能,并1、强化了缓存功能; 2、持续连接机制:keepalive,也称持久连接,长连接;


工作模式:

    http协议的工作模式:request/response模式;
    一次完整的http事务:请求<-->响应;

        客户端请求资源,服务器响应报文

    一次完整的http通信,包括一次请求及对应于此次请求的响应;

    

    并发响应模型:
        单进程IO模型:仅有一个进程用于处理和响应客户端请求,每次只能处理和响应一个客户端,串行响应模型;
        多进程IO模型:同时启动多个进程,每个进程只能处理和响应一个客户端请求;
        复用的IO模型:每个进程可以同时处理并响应多个客户端的请求;
        多线程的IO模型:每个进程可以生成多个线程,每个线程可以响应一个用户请求;
        事件驱动的IO模型:每个进程直接处理并响应多个客户端的请求;其中采用事件通知机制;
        复用的多进程IO模型:启动M个进程,且每个进程可以生成N个线程,每个线程可以处理并响应一个客户端的请求;M*N个客户端;
        复用的事件驱动的IO模型:启动M个进程,每个进程都是基于事件驱动的方式直接处理并响应多个客户端的请求;


web资源(分类、资源请求过程、资源标识符、资源映射路径)

    分类:

        静态资源:
            服务器会根据客户端的请求直接将资源原封不动的响应给客户端的资源;
                html文档
                图片
                视频片段,音频片段
                纯文本
                css
                ...

        动态资源:
            通常是由某种编程语言编写的程序文件,在服务器上经过某种特定方式执行之后生成相应的html页面,服务器将程序运行生成的html页面响应给客户端的资源;

            服务器端动态资源:
                php脚本
                jsp程序
                .NET程序
                python脚本
                ruby脚本
                C/C++程序

            客户端动态资源:
                javascript脚本
                Servlet
                ActiveX


    资源请求过程:

        1.建立TCP连接
        2.接收请求:将客户端发送来的报文经过通信子网的解封之后,将其放置于用户空间中相应的应用程序所在的内存空间中;
        3.分析处理请求:通过读取报文的http协议首部和body部分,获取客户端请求的资源的具体信息;
        4.访问资源:通过特定的IO方式从磁盘等IO设备上加载客户端请求的资源;
        5.构建响应报文:将加载的资源使用特定协议予以封装;
        6.发送响应报文:
        7.记录日志信息:


    资源标识符:

        URL:Uniform Resource Locator,统一资源定位符;
            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机制:

        如:
            /var/www/html/a.html (根文件系统上的路径)

            /var/www/html/ ----> / (web服务的路径)

            DocumentRoot /var/www/html/ (映射web根目录的指令)

            http://server/a.html

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


开源实现(动、静态资源请求与响应)

    实现静态资源请求的处理和响应:
        httpd(Apache)
        nginx(Engine X)
            Tengine
        lighttpd

    实现动态资源请求的处理和响应:应用程序服务器;
        JSP:
            Tomcat
            Weblogic
            Websphere
            Jboss
            Glassfish
        PHP:
            php
            php-fpm
        Python:
            python
        .NET:
            IIS


httpd的特性:

    高度模块化:Core + Modules
    DSO:Dynamic Shared Object,动态共享对象;可以实现模块的动态装载和卸载;
        模块分为两类:
            静态模块:static module,编译源代码时,直接编译至核心中的模块;如果想要更换静态模块,则必须要换核心文件;所有只有在重启服务进程之后,才能生效;

            动态模块:可以基于DSO方式动态装载和卸载,改变配置操作后,仅需要重载配置文件即可生效;
                MPM:Multipath Processing Modules,多道处理模块;用来设定httpd进程的并发响应模型;
                    prefork:多进程IO模型;
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
                        3.子进程负责处理客户端请求及构建和发送响应报文;
                        4.一个子进程仅能处理和响应一个客户端的请求;
                        5.httpd默认的MPM模块;

                    worker:复用的多进程IO模型(多进程多线程)
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
                        3.子进程负责管理其内部的各线程;
                        4.线程负责处理客户端请求及构建和发送响应报文;
                        5.一个线程仅能处理和响应一个客户端的请求;

                    event:复用的IO模型(事件驱动的多进程模型)
                        1.一个主进程,多个子进程;
                        2.主进程用于管理子进程,创建套接字,接收客户端请求,并将客户端请求派发给子进程处理;
                        3.子进程负责处理客户端请求及构建和发送响应报文;
                        4.一个子进程可以处理和响应多个客户端的请求;

                        注意:event模型在httpd-2.0之前不支持;在httpd-2.2版本中仅用作测试;只有在httpd-2.4中才被定义为建议使用的模型;

                        在CentOS 6中,通过rpm包仅能安装httpd-2.2版本,event模型是测试模型,不支持DSO动态装载和卸载;
                        在CentOS 7中,通过rpm包能安装httpd-2.4版本,event模式为"production ready",并且支持DSO动态装载和卸载;


httpd的功能:
    支持CGI(Common Gateway Interface);
    虚拟主机:Virtual Host
        虚拟主机的标识方式:
            IP + PORT + FQDN
    反向代理:Reverse Proxy
    负载均衡集群:
        基于流量,bytraffic
        基于业务,bybusiness
        基于请求,byrequest
    路径名称的别名的设置
    身份验证:
        basic
        digest
    支持丰富的第三方模块;


程序环境:

    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模型;
        /usr/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:服务控制命令,用于启动或停止服务的命令;

猜你喜欢

转载自blog.51cto.com/weidehong/2117781