超文字傳輸協議HTTP 二

2021-08-22 09:26:41 字數 2466 閱讀 2502

用於支援www瀏覽的網路協議為http,這是一種最基本的客戶機/伺服器的訪問協議。瀏覽器向伺服器傳送請求,而伺服器回應相應的網頁。http協議從2023年開始出現,發展到當前的http1.1標準,已經有了相當多的擴充套件,然而其最基本的實現是非常簡單的,伺服器需要進行的額外處理相當少,這也是為什麼web伺服器軟體如此眾多的原因之一。

請求方法

通常,http協議使用埠80來提供客戶訪問,因此也可以使用其他的網路軟體,如telnet,模擬客戶向伺服器傳送請求,來檢視http的傳輸方式。

$telnetwebserver80

trying192.168.0.1...

connectedtowebserver.

escapecharacteris'^]'.

get/index.html

當telnet顯示了connect等資訊建立了連線之後,伺服器就等待使用者輸入請求,而不進行任何提示。上例中,使用者輸入get/index.html指令,則伺服器立即將相應的網頁返回,然後關閉連線。

客戶程式向伺服器傳送的請求可以有不同的型別,這樣伺服器可以根據不同的請求型別進行不同的處理。在http1.0中,定義了三種最基本的請求型別,get、post和head,這些請求方法的實現方式均與上例相同,客戶程式用大寫指令將請求傳送給伺服器,後面跟隨具體的資料。

get請求最為常見,它後面跟隨乙個網頁的位置,伺服器接受請求並返回其請求的頁面。除了頁面位置作引數之外,請求還可以跟隨協議的版本如http/1.0等作為引數,以傳送給伺服器更多的資訊。

post請求要求伺服器接收大量的資訊,除了post後面跟隨的引數之外,瀏覽器還會在後面持續傳送資料,讓伺服器進行處理。通常,post方法是和cgi程式分不開的,伺服器應該啟動乙個cgi程式來處理post傳送來的資料。

head請求在客戶程式和伺服器之間進行交流,而不會返回具體的文件。當使用get和post方法時,伺服器最後都將結果文件返回給客戶程式,瀏覽器將重新整理顯示。而head請求則不同,它僅僅交流一些內部資料,這些資料不會影響瀏覽的過程。因此head方法通常不單獨使用,而是和其他的請求方法一起起到輔助作用。一些搜尋引擎使用的自動搜尋機械人使用這個方法來獲得網頁的標誌資訊,或者進行安全認證時,使用這個方法來傳遞認證資訊。

除了這三種最常見的訪問方法之外,在http1.1中還定義了更多的訪問方法型別,如put,用於將網頁放置到正確位置,delete用於刪除相關文件等。這些方法並不常用,因而大部分web伺服器軟體並沒有實現他們。然而對於特定場合他們還是非常有用的,例如使用軟體編輯網頁時,網頁編輯器可以使用這些方法,管理不同的網頁。

如果伺服器不支援客戶傳送的請求方法,伺服器將返回錯誤並立即關閉連線。

伺服器對http的處理方式

http協議的這種請求/回應的模式,使得伺服器只能根據客戶程式的請求傳送回資訊,這樣的好處是客戶具備很大的自由度,可以任意訪問伺服器上的資訊。因此就存在多個客戶同時訪問乙個伺服器的問題。

在unix下,由乙個守護程序來監視來自客戶程式的請求,當守護程序接受到乙個請求時,就建立乙個新的程序對請求進行處理。通常伺服器能建立足夠多的新程序來回應客戶的請求,然而如果同時傳送請求的客戶太多,那麼伺服器就有可能出現超載的情況,建立程序的速度跟不上眾多客戶傳送請求的速度,這樣就造成了伺服器對外表現反應遲緩。此外,為了提高使用者使用瀏覽器時的效能,現代瀏覽器還支援併發的訪問方式,瀏覽乙個網頁時同時建立多個連線,以迅速獲得乙個網頁上的多個圖示,這樣能更快速完成整個網頁的傳輸。但是對伺服器來講,更增加了瞬間負載。

顯然,造成這個問題的關鍵是伺服器對http協議的處理方式,一次請求就要建立乙個連線,在網頁上充滿了多個較小的圖象檔案的時候,那麼伺服器和客戶程式之間的大部分工作是用於建立連線,而真正用於傳遞資料的工作卻很輕鬆。因此,更好的利用現有連線,減少建立連線的消耗,就需要能在一次連線中回應多個請求。在http1.1中提供了這種持續連線的方式,而下一代http協議:http-ng更增加了有關會話控制、豐富的內容協商等方式的支援,來提供更高效率的連線。

除了針對每次請求都建立乙個新程序的處理方式之外,http守護程序也能使用其他的方式處理多個請求,例如使用多執行緒,或者使用非同步方式在不同請求之間進行切換,就能在乙個程序內處理多個請求。雖然比起建立新程序來講,這樣消耗的處理器資源略微減少,但是並不能從根本上消除併發訪問帶來的處理器資源不足的問題。一般使用執行緒和非同步方式的程式較為複雜,不能很容易擴充對新特性的支援,並有可能因為程式內部要自己進行同步等原因也會造成資源消耗。使用這些方式,雖然對處理靜態的網頁有好處,但對於執行cgi程式,仍然要建立子程序進行處理。因此,大部分執行在unix上的守護程式仍然使用多程序的方式,這種方式簡單卻有效。

即使對於使用多程序方式進行處理的web伺服器,也有不同的處理方式。unix系統中提供了超級伺服器程序inetd,因此簡單的web伺服器可以使用inetd來啟動真正的web伺服器。然而,inetd效率不高,使用inetd的伺服器不能用作高負載的伺服器系統,因此高負載的web伺服器,本身來監聽客戶連線請求,並負責啟動子進**正處理客戶的請求。

如果選擇的伺服器程式的確需要使用inetd來啟動,可以選擇與inetd功能相同,但效率更高的超級伺服器程序tcpserver,它可以比inetd更高效的啟動服務程序。

超文字傳輸協議 HTTP

方法 統一資源識別符號 uri 協議 版本出現在請求的第一行。這裡post是請求方法,examples default.jsp是uri,而http 1.1是協議 版本部分。每個http請求可以使用http標準裡邊提到的多種方法之一。http 1.1支援7種型別的請求 get,post,head,op...

http 超文字傳輸協議

html專門用於定義瀏覽器與伺服器之間交換資料的過程以及資料本身的格式 它是一種請求 響應式的協議 特點 1.支援客戶端 伺服器模式 2.簡單快速 客戶端只需向伺服器端傳送請求方式和路徑 3.靈活 允許傳送任何形式的資料,只需指定content type的值 4.無狀態 對事務處理沒有記憶能力 請求...

http超文字傳輸協議

應用層規範傳輸的格式,底層是tcp ip傳輸協議 http協議之請求 過程 接受響應 關閉通道 請求方式 請求方式有很多,也許格式不一樣,但是行,頭,空行一定有 有 options put delete trace connect 常用的有get post post 用哪個 get適合資料量小沒有安...