【slighttpd】基於lighttpd架構的Server項目實戰(6)—預備知識之Http

來源:互聯網
上載者:User

標籤:版本號碼   方法   方式   不同的   一個   擴充   state   表示   適用於   

接下來,我們開始http部分的開發。

在此之前。有必要先學習一下HTTP協議~

http1.1 的rfc文檔:http://www.ietf.org/rfc/rfc2616.txt

簡單介紹

超文字傳輸通訊協定 (HTTP)(Hypertext Transfer Protocol。簡稱HTTP)是應用程式層協議,是一種請求/響應式的協議,即一個client與server建立串連後,向server發送一個請求,server接到請求後。給予相應的響應資訊。

HTTP 要求報文

HTTP 要求報文由請求行、要求標頭部、空行 和 請求體 4 個部分組成:

|  要求方法 | URL | 協議版本號碼 |     ->請求行|  要求標頭部(Request Header) ||  空行                     ||  body                    |

【請求行】:由方法欄位、URL 欄位 和HTTP 協議版本號碼欄位 3 個部分組成,他們之間使用空格隔開。經常使用的 HTTP 要求方法有 GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT;

範例:
GET /index.jsp?id=100&op=bind HTTP/1.1

● GET:當client要從server中讀取某個資源時,使用GET 方法。

GET 方法要求server將URL 定位的資源放在響應報文的資料部分。回送給client。即client向server請求某個資源。使用GET 方法時,請求參數和相應的值附加在 URL 後面,利用一個問號(“?”)代表URL 的結尾與請求參數的開始。傳遞參數長度受限制。

比如,/index.jsp?

id=100&op=bind。

● POST:當client給server提供資訊較多時能夠使用POST 方法,POST 方法向server提交資料。比方完畢表單資料的提交。將資料提交給server處理。GET 一般用於擷取/查詢資源資訊,POST 會附帶使用者資料,一般用於更新資源資訊。

POST 方法將請求參數封裝在HTTP 要求資料中,以名稱/值的形式出現,能夠傳輸大量資料;

● PUT:用於改動某個內容。

● DELETE:刪除某個內容。

● CONNECT:用於代理進行傳輸。如使用SSL;

● OPTIONS:詢問能夠運行哪些方法;

● PATCH:部分文檔更改;

● PROPFIND, (wedav):查看屬性;

● PROPPATCH, (wedav): 設定屬性;

● MKCOL, (wedav):建立集合(目錄);

● COPY, (wedav):拷貝;

● MOVE, (wedav):移動;

● LOCK, (wedav):加鎖。

● UNLOCK (wedav):解鎖。

● TRACE:用於遠端診斷server。

● HEAD:相似於GET, 可是不返回body資訊。用於檢查對象是否存在,以及得到對象的中繼資料;

【要求標頭部】:要求標頭部由key/value對組成,每對一行,keyword和值用英文冒號“:”分隔。要求標頭部通知server有關於client請求的資訊。典型的要求標頭有:

● User-Agent:產生請求的瀏覽器類型;

● Accept:client可識別的響應內容類型列表;星號 “ * ” 用於按範圍將類型分組。用 “ */* ” 指示可接受所有類型,用“ type/* ”指示可接受 type 類型的所有子類型;

● Accept-Language:client可接受的自然語言;

● Accept-Encoding:client可接受的編碼壓縮格式;

● Accept-Charset:可接受的應答的字元集;

● Host:請求的主機名稱,同意多個網域名稱同處一個IP 位址,即虛擬機器主機;

● connection:串連方式(close 或 keepalive);

close:告訴 WEB server或者代理server,在完畢本次請求的響應後,中斷連線,不等待本次串連的興許請求了。
keepalive:告訴WEBserver或者代理server,在完畢本次請求的響應後,保持串連。等待本次串連的興許請求;

● Cookie:儲存於client擴充欄位。向同一網域名稱的服務端發送屬於該域的cookie;

【空行】:最後一個要求標頭之後是一個空行。發送斷行符號符和分行符號,通知server下面不再有要求標頭;

【請求包體】:請求包體不在 GET 方法中使用。而是在POST 方法中使用。POST 方法適用於須要客戶填寫表單的場合。與請求包體相關的最常使用的是包體類型 Content-Type 和包體長度 Content-Length。

HTTP響應報文

HTTP 響應報文由狀態行、回應標頭部、空行 和 響應包體 4 個部分組成:

|  協議版本號碼 | 狀態代碼 | 狀態代碼描寫敘述 |  ->狀態行|  回應標頭(Response Header)      ||  空行                         ||  響應本文                     |

【狀態行】:狀態行由 HTTP 協議版本號碼欄位、狀態代碼和狀態代碼的描寫敘述文本 3 個部分組成,他們之間使用空格隔開;

● 狀態代碼由三位元字組成。第一位元字表示響應的類型,經常使用的狀態代碼有五大類例如以下所看到的:

1xx:表示server已接收了client請求,client可繼續發送請求;

2xx:表示server已成功接收到請求並進行處理;

3xx:表示server要求client重新導向;

4xx:表示client的請求有非法內容;

5xx:表示server未能正常處理client的請求而出現意外錯誤;

● 狀態代碼描寫敘述文本有例如以下取值:

200 OK:表示client請求成功;

400 Bad Request:表示client請求有語法錯誤,不能被server所理解;

401 Unauthonzed:表示請求未經授權,該狀態碼必須與 WWW-Authenticate 前序域一起使用;

403 Forbidden:表示server收到請求,可是拒絕提供服務,一般會在響應本文中給出不提供服務的原因;

404 Not Found:請求的資源不存在,比如。輸入了錯誤的URL;

500 Internal Server Error:表示server發生不可預期的錯誤,導致無法完畢client的請求;

503 Service Unavailable:表示server當前不能夠處理client的請求,在一段時間之後,server可能會恢複正常;

【回應標頭部】:要求標頭部由key/value對組成,每對一行,keyword和值用英文冒號“:”分隔。部分例如以下:

● Location:用於重新導向接受者到一個新的位置。比如:client所請求的頁面已不存在原先的位置,為了讓client重新導向到這個頁面新的位置。server端能夠發回Location響應前序後使用重新導向語句,讓client去訪問新的網域名稱所相應的server上的資源;

● Server:Server 響應前序域包括了server用來處理請求的軟體資訊及其版本號碼。它和 User-Agent 請求前序域是相相應的,前者發送server端軟體的資訊,後者發送client軟體(瀏覽器)和作業系統的資訊。

● Vary:指示不可快取的要求標頭列表;

● Connection:串連方式;
(close:串連已經關閉;
keepalive:串連保持著,在等待本次串連的興許請求; )

● Keep-Alive:假設瀏覽器請求保持串連。則該頭部表明希望WEB server保持串連多長時間(秒);比如:Keep-Alive:300;

● WWW-Authenticate:WWW-Authenticate響應前序域必須被包括在401 (未授權的)響應訊息中,這個前序域和前面講到的Authorization 請求前序域是相關的。當client收到 401 響應訊息,就要決定是否請求server對其進行驗證。假設要求server對其進行驗證。就能夠發送一個包括了Authorization 前序域的請求;

【空行】:最後一個回應標頭部之後是一個空行,發送斷行符號符和分行符號,通知server下面不再有回應標頭部。

【響應包體】:server返回給client的文本資訊;

HTTP 無狀態性

HTTP 協議是無狀態的(stateless)。也就是說。同一個client第二次訪問同一個server上的頁面時,server無法知道這個client以前訪問過,server也無法分辨不同的client。

HTTP 的無狀態特性簡化了server的設計。使server更easy支援大量並發的HTTP 要求。

HTTP 持久串連

HTTP1.0 使用的是非持久串連,主要缺點是client必須為每個待請求的對象建立並維護一個新的串連。即每請求一個文檔就要有兩倍RTT 的開銷。由於同一個頁面可能存在多個對象。所以非持久串連可能使一個頁面的下載變得十分緩慢,並且這樣的短串連添加了網路傳輸的負擔。

HTTP1.1 使用持久串連keepalive。所謂持久串連,就是server在發送響應後仍然在一段時間內保持這條串連,同意在同一個串連中存在多次資料請求和響應,即在持久串連情況下,server在發送完響應後並不關閉TCP 串連,而client能夠通過這個串連繼續請求其它對象。

HTTP/1.1 協議的持久串連有兩種方式:

● 非流水線方式:客戶在收到前一個響應後才幹發出下一個請求;

● 流水線方式:客戶在收到 HTTP 的響應報文之前就能接著發送新的請求報文。

好啦~http的基本知識就介紹到這裡,接下來我們將針對http來為我們的server加入功能,對於http的解析部分,我不打算自己寫,將使用一個第三方的解析庫http-parser。

【slighttpd】基於lighttpd架構的Server項目實戰(6)—預備知識之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.