1. 程式人生 > >http協議的簡單介紹

http協議的簡單介紹

Linux

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

http協議的特點:
    1.典型的應用層協議;
    2.端口號是80/TCP;
TCP協議的特性:
    1.面向連接:
        建立連接(三次握手),維持連接穩定,拆除連接(四次揮手)
        數據序列化傳輸;
    2.將數據分段打包,並為每段提供CRC校驗和,從而保證數據的完整性;
    3.確認機制:
    4.通過流量控制來最大利用網絡資源:(利用滑動窗口來控制流量) 
    5.擁塞機制:慢啟動算法+擁塞避免算法;快重傳算法+快恢復算法;

http協議:
Hyper Transfer Protocol,超文本傳輸協議; //超文本:帶有超鏈接的文本
HTML:Hyper-Text Marked Language,超文本標記語言;----靜態網頁

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

http協議的簡單介紹