與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:服務控制命令,用於啓動或停止服務的命令;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章