HTTP協議的作用原理

2021-05-21 17:41:30 字數 4204 閱讀 3110

www是以internet作為傳輸媒介的乙個應用系統,www網上最基本的傳輸單位是web網頁。www的工作基於客戶機/伺服器計算模型,由web 瀏覽器(客戶機)和web伺服器(伺服器)構成,兩者之間採用超文字傳送協議(http)進行通訊。http協議是基於tcp/ip協議之上的協議,是web瀏覽器和web伺服器之間的應用層協議,是通用的、無狀態的、物件導向的協議。http協議的作用原理包括四個步驟:

連線:web瀏覽器與web伺服器建立連線,開啟乙個稱為socket(套接字)的虛擬檔案,此檔案的建立標誌著連線建立成功。

請求:web瀏覽器通過socket向web伺服器提交請求。http的請求一般是get或post命令(post用於form引數的傳遞)。get命令的格式為:

get 路徑/檔名 http/1.0

檔名指出所訪問的檔案,http/1.0指出web瀏覽器使用的http版本。

應答:web瀏覽器提交請求後,通過http協議傳送給web伺服器。web伺服器接到後,進行事務處理,處理結果又通過http傳回給web瀏覽器,從而在web瀏覽器上顯示出所請求的頁面。

例:假設客戶機與www.mycomputer.com:8080/mydir/index.html建立了連線,就會傳送get命令:get /mydir/index.html http/1.0。主機名為www.mycomputer.com的web伺服器從它的文件空間中搜尋子目錄mydir的檔案index.html。如果找到該檔案,web伺服器把該檔案內容傳送給相應的web瀏覽器。

為了告知 web瀏覽器傳送內容的型別,web伺服器首先傳送一些http頭資訊,然後傳送具體內容(即http體資訊),http頭資訊和http體資訊之間用乙個空行分開。

常用的http頭資訊有:

這是web伺服器應答的第一行,列出伺服器正在執行的http版本號和應答**。**「200 ok」表示請求完成。

② mime_version:1.0

它指示mime型別的版本。

③ content_type:型別

這個頭資訊非常重要,它指示http體資訊的mime型別。如:content_type:text/html指示傳送的資料是html文件。

④ content_length:長度值

它指示http體資訊的長度(位元組)。

關閉連線:當應答結束後,web瀏覽器與web伺服器必須斷開,以保證其它web瀏覽器能夠與web伺服器建立連線。

二、c#實現web伺服器功能的程式設計

根據上述http協議的作用原理,實現get請求的web伺服器程式的方法如下:

建立tcplistener類物件,監聽某埠(任意輸入閒置埠 如:8080 )。

等待、接受客戶機連線到該埠,得到與客戶機連線的socket;

從與socket關聯的輸入流中讀取一行客戶機提交的請求資訊,請求資訊的格式為:get 路徑/檔名 http/1.0

從請求資訊中獲取請求型別。如果請求型別是get,則從請求資訊中獲取所訪問的html檔名。沒有html檔名時,則以index.html作為檔名;

如果html檔案存在,則開啟html檔案,把http頭資訊和html檔案內容通過socket傳回給web瀏覽器,然後關閉檔案。否則傳送錯誤資訊給web瀏覽器;

關閉與相應web瀏覽器連線的socket字。

實現的**如下:

console.writeline("連線失敗....");

}catch (exception e)

", e );}}

public static void main() 

public void startlisten()

/n",mysocket.remoteendpoint) ;

byte breceive = new byte[1024] ;

int i = mysocket.receive(breceive,breceive.length,0) ;

//轉換成字串型別

string sbuffer = encoding.ascii.getstring(breceive);

//只處理"get"請求型別

if (sbuffer.substring(0,3) != "get" )

// 查詢 "http" 的位置

// 得到請求型別和檔案目錄檔名

srequest = sbuffer.substring(0,istartpos - 1);

srequest.replace("//","/");

//如果結尾不是檔名也不是以"/"結尾則加"/"

if ((srequest.indexof(".") <1) && (!srequest.endswith("/")))

//得帶請求檔名

istartpos = srequest.lastindexof("/") + 1;

srequestedfile = srequest.substring(istartpos);

//得到請求檔案目錄

sdirname = srequest.substring(srequest.indexof("/"), srequest.lastindexof("/")-3);

//獲取虛擬目錄物理路徑

slocaldir = smywebserverroot;

console.writeline("請求檔案目錄 : " + slocaldir);

if (slocaldir.length == 0 )

if (srequestedfile.length == 0 )

/// 取得請求檔案型別(設定為text/html)

/string smimetype = "text/html";

sphysicalfilepath = slocaldir + srequestedfile;

console.writeline("請求檔案: " + sphysicalfilepath);

HTTP協議的工作原理

1 http協議規定,請求是從客戶端發出,最後伺服器端相應該請求並返回 2 請求報文是由請求方法,請求uri,協議版本,可選的請求首部欄位和內容實體構成。3 響應報文基本上由協議版本,狀態碼,解釋狀態碼的原因短語,可選的響應首部字段以及實體主體構成。4 告知伺服器意圖的http方法 5 持續連線節省...

http協議頭資訊的作用

請求頭 accept charset 用於告訴瀏覽器。客戶機採用的編碼 accept encoding 用於告訴伺服器,客戶機支援的資料壓縮格式 accept language 客戶機的語言環境 host 客戶機通過這個頭告訴伺服器,想訪問的主機名 if modified since 客戶機通過這個...

Http協議原理學習

http協議用於在internet上傳送和接收訊息。http協議是一種請求 應答式的協議 客戶端傳送乙個請求,伺服器返回該請求的應答,所有的請求與應答都是http包。http協議使用可靠的tcp連線,預設埠是80。http的第一 個版本是http 0.9,後來發展到了http 1.0,現在最新的版本...