第十二章 http協議

來源:互聯網
上載者:User

標籤:瀏覽器   互連網   cookie   伺服器   電腦   

12.1 http協議簡介

  http(HyperText Transfer Protocol,超文字傳輸通訊協定 (HTTP))是互連網上應用最為廣泛的一種網路通訊協定。所有的www檔案都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過電腦處理文本資訊的方法,並稱之為超文本(hypertext)。這成為HTTP超文字傳輸通訊協定 (HTTP)標準架構的發展根基。

  超文本就是帶有超連結的文本,超連結就是基於一些連結實現文檔間跳轉的文本。


  http協議是一種無狀態的協議(stateless):

  伺服器無法持續追蹤訪問者來源,為瞭解決此問題引入了cookie和session,實現追蹤與儲存使用者的行為


12.2 http技術架構

  http是一個用戶端和伺服器端請求和應答的標準(TCP)。用戶端是終端使用者,伺服器端是網站。

  通過使用web瀏覽器、網路爬蟲或者其它的工具,用戶端發起一個到伺服器上指定連接埠(預設連接埠為80)的HTTP請求。

  這個用戶端被稱作使用者代理程式(User Agent)。

  應答的伺服器上儲存著一些資源,比如HTML檔案和映像,這個應答伺服器被稱作原始伺服器(Origin Server)。


  在使用者代理程式和原始伺服器中間可能存在多個中介層,比如代理,網關,或者隧道。儘管TCP/IP協議是互連網上最流行的應用,HTTP協議並沒有規定必須使用它和基於它支援的層。事實上,HTTP可在任何其他互連網協議上,或者在其他網路上實現。HTTP只假定其下層協議提供可靠的傳輸,任何能夠提供這種保證的協議都可以被其使用。


  通常,由HTTP用戶端發起一個請求,建立一個到伺服器指定連接埠的TCP串連。HTTP伺服器則在那個連接埠監聽用戶端發送過來的請求。一旦收到請求,伺服器向用戶端發回一個狀態行,比如“HTTP/1.1 200 OK”和響應的訊息,訊息的訊息團體可能是請求的檔案、錯誤訊息或者其它一些資訊。HTTP使用TCP而不是UDP的原因在於開啟一個網頁必須傳送很多資料,而TCP協議提供傳輸控制,按順序組織資料和錯誤校正。


  通過HTTP或者HTTPS協議請求的資源由統一資源標示符(Uniform Resource Identifiers)來標識。


12.3 http協議功能

  http協議是用於從www伺服器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證電腦正確快速地傳輸超文字文件,還確定傳輸文檔中的哪一部分以及哪些部分內容首先顯示(如文本先於圖形)等。


  http是用戶端瀏覽器或其他程式與web伺服器之間的應用程式層通訊協定。在internet上的web伺服器上存放的都是超文本資訊,客戶機需要通過http協議傳輸所要訪問的超文本資訊。http包含命令和傳輸資訊,不僅可用於web訪問,也可以用於其他網際網路/內連網應用系統之間的通訊,從而實現各類應用資源超媒體訪問的整合。


  我們在瀏覽器的地址欄裡輸入的網站地址叫做URL(Uniform Resource Locator,統一資源定位器)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超連結時,URL就確定了林瀏覽的地址。瀏覽器通過HTTP將web伺服器上網站的網頁代碼提取出來,並翻譯成漂亮的網頁。


12.4 http協議版本

  超文字傳輸通訊協定 (HTTP)已經演化出了很多版本,它們中的大部分都是向下相容的。在RFC 2145中描述了HTTP版本號碼的用法。用戶端在請求的開始告訴伺服器它採用的協議版本號碼,而後者則在響應中採用相同或者更早的協議版本。

  http協議的版本主要有以下這些:

  HTTP/0.9:最原始版本,功能簡陋。只接受GET一種要求方法,沒有在通訊中指定版本號碼,且不支援要求頭。由於該版本不支援POST方法,所以用戶端無法向伺服器傳遞太多資訊。

  HTTP/1.0:這是第一個在通訊中指定版本號碼的HTTP協議版本,至今仍被廣泛採用,特別是在Proxy 伺服器中。支援MIME。

  HTTP/1.1:增加了緩衝功能,引入了長串連(預設採用),能很好的配合Proxy 伺服器工作 ,支援以管理方式同時發送多個請求,以便降低線路負載,提高傳輸速度。

  HTTP/2.0:大幅度提升了web效能,減少網路延遲,通常用於https


  HTTP/1.1相較於 HTTP/1.0 協議的區別主要體現在:

  a) 緩衝處理

  b) 頻寬最佳化及網路連接的使用

  c) 錯誤通知的管理

  d) 訊息在網路中的發送

  e) 互連網地址的維護

  f) 安全性及完整性


12.5 名詞解釋

  HTML:HyperText Mark Language,超文字標記語言 (HTML)


  URI:Uniform Resource Indentifier,統一資源識別項。用於定義全域範圍內(包括但不僅限於互連網)去標記唯一的、定位一種資源訪問路徑的方式,或者命名方式,被稱作統一資源識別項。這裡的統一指的是路徑格式上的統一。


  URL:Uniform Resource Location,統一資源定位器,是URI的一個子集,用於描述在互連網上互連網資源的統一表示格式(protocol://host:port/path/to/file)

  URL基本文法:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

    params:參數,如http://www.idfsoft.com/bbs/index.html;gender=f,這裡的gender=f就是一個參數

    query:傳遞給關係型資料庫頁面的特定行為。如http://www.idfsoft.com/bbs/item.php?username=tom&title=abc,這個URL表示要查詢的是username=name並且title=abc的條目

    frag:用來定義一個較大頁面中的某一個位置,而不是頁面的開始處。說白點就是位置錨定


  URN:Uniform Resource Naming,統一資源命名符,也是URI的一個子集


  MIME:Multipurpose Internet Mail Extension,多用途互連網郵件擴充。

  MIME可以將非文本資料在傳輸前重新編碼為文字格式設定再傳輸給對方,接收方能夠用相反的方式將其重新還原為原來的格式,還能夠調用相應的程式來開啟此檔案


  http事務:http協議的一次請求(request)和響應(response)的過程就稱之為http事務


  動態網頁:包含靜態內容和動態內容(動態內容需要執行) 

  伺服器端儲存的不是HTML文檔,而是程式設計語言開發的指令碼,指令碼接受參數之後在伺服器端運行一次,運行完成之後會產生HTML格式的文檔,並把產生好的HTML文檔傳給用戶端


  Web資源:web resource。

    靜態檔案:.jpg,.gif,.html,.txt,.js,.css,.mp3,.avi

    動態檔案:.php,.jsp


  PV:Page View,開啟了多少頁面

  UV:User View,獨立IP量


12.6 http協議報文

  http協議採用了請求/響應模型。用戶端向伺服器發送一個請求,要求標頭包含請求的方法、URL、協議版本以及包含請求修飾符、客戶資訊和內容的類似於MIME的訊息結構。伺服器以一個狀態行作為響應,響應的內容包括訊息協議的版本,成功或者錯誤編碼加上包含伺服器資訊、實體元資訊以及可能的實體內容。


  http協議的報文有請求報文和響應報文2種,其文法樣式如下:

    請求報文文法:

<method> <request-URL> <version><headers><entity-body>

    響應報文文法:

<version> <status> <reason-phrass><headers><entity-body>

  報文的第一行通常稱作報文“起始行(start line)”,後面的標籤格式的內容稱作首部域(Header Field),每個首部域由名稱(name)和值(value)組成,中間用逗號分隔。

  另外,響應報文通常還有一個稱作Body的資訊主體,即響應給用戶端的內容。


  method:要求方法,標明用戶端希望伺服器對資源執行的動作,常見的有以下幾種:

    GET:從伺服器擷取一個資源

    HEAD:只從伺服器擷取文檔的響應首部,而不會發送響應內容。當我們只需要查看某個頁面的狀態的時候,使用HEAD是非常高效的

    POST:向伺服器發送要處理的資料。伺服器端通常通過提供一個表單,用戶端填入資料時會把內容放入entity-body中提交提交給伺服器端

    PUT:將請求的主體部分儲存在伺服器上。說白點就是上傳資料

    DELETE:請求刪除伺服器上指定的文檔

    TRACE:追蹤請求到達伺服器中間經過的Proxy 伺服器

    OPTIONS:請求伺服器返回對指定資源支援使用的要求方法

  version:http的協議版本,格式如HTTP/<major>.<minor>

  status:響應狀態代碼,用於標記請求處理過程中發生的情況,常見的響應狀態代碼有以下幾種:

    1xx:100-101,純資訊提示

      100:伺服器僅接收到部分請求,但是一旦伺服器並沒有拒絕該請求,用戶端應該繼續發送其餘的請求,響應狀態代碼為"Continue"

      101:伺服器轉換協議,伺服器將遵從客戶的請求轉換到另外一種協議,響應狀態代碼為"Switching Protocols"

    2XX:200-206,“成功”類的資訊

      200:請求資源正常。請求的所有資料通過響應報文的entity-body部分發送,響應狀態代碼為“OK”

      201:請求被建立完成,同時新的資源被建立,響應狀態代碼為"Created"

      202:供處理的請求已被接受,但處理未完成,響應狀態代碼為"Accepted"

      203:文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝,響應狀態代碼為"Non-authoritative information"

      204:沒有新文檔。瀏覽器應該繼續顯示原來的文檔。響應狀態代碼為"No Content"

      205:沒有新文檔。但瀏覽器應該重設它所顯示的內容。用來強制瀏覽器清除表單輸入內容,響應狀態代碼為"Reset Content"

      206:客戶發送了一個帶有Range頭的GET請求,伺服器完成了它

    3XX:300-305,“重新導向”類的資訊

      301:永久重新導向,響應狀態代碼為“Moved Permanently”

        請求的URL指向的資源已經被刪除,但在響應報文中通過首部Location指明了資源現在所處的新位置,用戶端需要請求新位置的資源

      302:臨時重新導向,我這裡正忙,你要的資源在另一個地方也有,你先去那裡要,響應狀態代碼為“Found”

        與301相似,但在響應報文中通過Location指明資源現在所處的臨時新位置

      304:用戶端發出了條件式請求,但伺服器端發現用戶端請求的資源已被用戶端緩衝過且未發生改變,讓用戶端直接到緩衝裡去取。響應狀態代碼為“Not Modified”

    4XX:400-415,“用戶端錯誤”類的資訊

      400:由於用戶端請求有語法錯誤,不能被伺服器所理解,響應狀態代碼為“Bad Request”

      401:需要輸入帳號和密碼認證方能訪問資源,響應狀態代碼為“Unauthorized”

      403:請求被禁止,響應狀態代碼為“Forbidden”

      404:伺服器無法找到用戶端請求的資源,響應狀態代碼為“Not Found”

    5XX:500-505,“服務端錯誤”類的資訊

      500:伺服器內部錯誤,響應狀態代碼為“Internal Server Error”

      502:Proxy 伺服器從後端伺服器收到了一條偽響應,響應狀態代碼為“Bad Gateway”

      503:伺服器當前不能夠處理用戶端的請求,在一段時間之後,響應狀態代碼為“Service”

  reason-phrass:解釋status狀態代碼的情況,你成功了,是什麼成功了,你失敗了,是什麼失敗了,是擷取檔案成功/失敗還是上傳檔案成功/失敗等等。

  headers:用來標記請求或響應的屬性

    每個請求或響應報文可包含任意個首部;

    每個首部都有首部名稱,後面跟一個冒號,而後跟上一個可選空格,接著是一個值


    格式:Name: Value


    首部的分類

      通用首部:可用在請求報文和響應報文中,常見的內容如下:

        Date:報文的建立時間

        Connection:串連狀態,如keep-alive,close等

        Via:顯示報文經過的中間節點

        Cache-Control:控制緩衝的生效方法和機制

      請求首部:只能在請求報文中使用,常見的內容如下:

        Accept:通知伺服器用戶端可以接受的媒體類型

        Accept-Charset:通知伺服器用戶端可以接受的字元集

        Accept-Encoding:通知伺服器用戶端可以接受的內容編碼格式,如gzip

        Accept-Language:通知伺服器用戶端可以接受的語言

        Client-IP:用戶端的IP

        Host:請求的伺服器名稱和連接埠號碼

        Referer:包含當前正在請求的資源的上一級資源

        User-Agent:用戶端代理


        條件式請求首部:

          Expect:期望伺服器端發什麼資訊

          If-Modified-Since:自從此處指定的時間之後請求的資源是否發生修改

          If-Unmodified-Since:自從此處指定的時間之後請求的資源是否未發生修改

          If-None-Match:本機快取中儲存的文檔的ETag標籤是否與伺服器文檔的ETag不匹配

         If-Match:本機快取中儲存的文檔的Etag是否與伺服器文檔的Etag匹配

        安全請求首部:

          Authorization:向伺服器發送認證資訊,如帳號和密碼

          Cookie/Cookie2:用戶端向伺服器發送cookie

        代理請求首部:

          Proxy-Authorization:向Proxy 伺服器認證

      響應首部:只能在響應報文中使用

        資訊性:

          Age:響應持續時間長度

          Server:伺服器程式軟體名稱和版本

        協商首部:某資源有多種表示方法時使用

          Accept-Ranges:伺服器可接受的請求範圍類型

          Vary:伺服器查看的其它首部列表

        安全響應首部:

          Set-Cookie:向用戶端設定cookie

          Set-Cookie2:向用戶端設定cookie2

          WWW-Authenticate:來自伺服器的對用戶端的質詢認證表單

      實體首部:標識實體的相關資訊

        Allow:列出對此實體可使用的要求方法

        Location:告訴用戶端真正的實體位於何處

        Content-Encoding:內容的編碼格式

        Content-Language:內容使用的語言

        Content-Length:主體的長度

        Content-Location:實體真正所處的位置

        Content-Type:主體的物件類型

        緩衝相關:

          ETag:實體的擴充標籤

          Expires:實體的到期時間

          Last-Modified:最後一次修改的時間

      擴充首部

  entity-body:請求時附加的資料或響應時附加的資料,有可能為空白


  請求報文樣本:

GET / HTTP/1.1HOST:www.baidu.comConnection:keep-alive

  

  響應報文樣本:

HTTP/1.1 200 OKX-Powered-By:PHP/5.2.17Vary:Accept-Encoding,Cookie,User-AgentCache-Control:max-age=3,must-revalidateContent-Encoding:gzipContent-Length:6931


12.7 http周邊

  常見的協議查看、分析的工具:

    tcpdump

    tshark

    wireshark


  常見的http伺服器程式:

    httpd(apache)

    nginx

    lighttpd

    應用程式伺服器:可以處理動態檔案

      IIS

      tomcat,jetty,jboss,resin

      webshpere,weblogic,oc4j


  常用的http壓力測試工具:

    ab:

      文法:ab [options] URL

      -n:總的請求數

      -c:類比的並發數

      -k:以持久串連模式測試

    webbench

    http_load

    jmeter

    loadrunner

    tcpcopy


  ulimit -n #:調整目前使用者所能夠同時開啟的檔案數


 web伺服器資源路徑映射方式:

    docroot

    alias

    虛擬機器主機docroot

    使用者家目錄docroot


  並發訪問響應模型(Web I/O):此處假定每個進程內只有一個線程

    單進程I/O結構:啟動一個進程處理請求,而且一次只處理一個,多個請求被串列響應

    多進程I/O結構:並行啟動多個進程,每個進程響應一個請求

    複用I/O結構:一個進程響應多個請求

      多執行緒模式:一個進程產生多個線程,每個線程響應一個使用者請求

      事件驅動

    複用的多進程I/O結構:啟動多個(m)進程,每個進程響應n個請求


12.8 https

  https其實就是將ssl或tls應用於http協議的結果,https監聽於tcp/443連接埠


  ssl會話的簡化過程如下:

  (1)用戶端發送可供選擇的加密方式,並向伺服器請求認證

  (2)伺服器端發送認證以及選定的加密方式給用戶端

  (3)用戶端取得認證並進行認證驗證

    如果信任給其發認證的CA:

    a) 驗證認證來源的合法性:用CA的公開金鑰解密認證上的數位簽章

    b) 驗證認證內容的合法性:完整性驗證

    c) 檢查認證的有效期間限

    d) 檢查認證是否被吊銷

    e) 認證中擁有者的名字,與訪問的目標主機要一致

  (4)用戶端產生臨時工作階段金鑰(對稱金鑰),並使用伺服器端的公開金鑰加密此資料發送給伺服器,完成金鑰交換

  (5)伺服器用祕密金鑰加密使用者請求的資源,響應給用戶端

  注意:SSL會話是基於IP地址建立,所以單IP的主機上,僅可以使用一個https虛擬機器主機


  WEB伺服器的主要操作:

    建立串連——接受或拒絕用戶端串連請求;

    接收請求——通過網路讀取HTTP請求報文;

    處理請求——解析請求報文並做出相應的動作;

    訪問資源——訪問請求報文中相應的資源;

    構建響應——使用正確的首部產生HTTP響應報文;

    發送響應——向用戶端發送產生的響應報文;

    記錄日誌——當已經完成的HTTP事務記錄進記錄檔

本文出自 “忘情居” 部落格,請務必保留此出處http://itchentao.blog.51cto.com/5168625/1931364

第十二章 http協議

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.