Thttpd源程式解析6 GET和POST的區別

2021-09-23 10:12:35 字數 1084 閱讀 4570

前端面試的時候面試官可能會問你get方法和post的方法的區別,很多書上會說get的請求長度是受限制的,請求在url中等等等下面我們將看thttpd處理get和post方法時怎樣處理。

一般的http請求將會分為3各部分以回車換行符間隔:

(1)起始行

起始行 需要表明請求的方法  請求的檔案的路徑(相對於http伺服器資源目錄的路徑) 請求使用的協議 三者以至少乙個空格間隔。比如下面的格式:

get /index.html  http/1.1 表明使用get方法,請求http伺服器目錄下的index.html檔案 使用的http協議為1.1

(2)首部

首部有很多引數表明接收的資料型別,快取控制,使用者**,快取控制,接收編碼型別等資訊,可以有0或者多個鍵值對以回車換行符結束

(3)主題

資料正文部分,可以沒有。

比如獲取w3school的根檔案可以使用下面的字元傳送到w3school.com.cn的80埠,表示回車表示換行

連線ip:120.50.41.41:80

傳送的內容 get /  http/1.1 host:www.w3school.com.cn

由於w3school必須要填寫首部的host所以上面填寫了首部的host內容,一般的其他伺服器比如這裡的thttpd伺服器get請求可以沒有首部和主題。

現在我們進入主題說一下get和post在伺服器端的區別:

一般做前端都應該知道get請求的請求引數都在url中而post的請求在主題中所以區別如下:

(1)get的請求內容在url中即分析起始行便可以獲取請求資料,而post請求的資料在主題部分所以post請求首部中需要有content-length表明主題中資料長度。

(2)get將請求的資料儲存在環境變數中,post的請求資料在主題中

(3)post請求除了正常處理get請求還需要獲取主題中的資料儲存在子程序的標準輸入中。

(4)post請求將會設定keep-alive=40即不會立即關閉連線

(5)get引數儲存在url中所以通訊資料只能是ascii碼而post主題中的資料沒有此限制,同理還有資料長度的限制當然也不是無限制的thttpd用的資料型別為long long顯然是比url長度大很多。

Thttpd源程式解析3 Thttpd配置

thttpd在啟動時可以進行配置,可以使用命令的方式也可以使用配置檔案的方式,這裡將對於命令的方式進行配置。下面講解每個命令的意義。1 v 作用 輸出thttpd伺服器的版本資訊,然後退出thttpd程式。注意 當命令引數中有 v引數將會導致程式的退出。2 c 注意 c 後面要直接接檔案的路徑。3 ...

Thttpd源程式解析12 fdwatch c檔案

fdwatch.c檔案的主要作用是管理伺服器的檔案描述符。static int nfiles 最大支援監聽的檔案的數量 static long nwatches 監聽的檔案的數量 static int fd rw 檔案描述符的讀寫狀態陣列 static void fd data 讀寫檔案描述符的資料...

Thttpd源程式解析10 timer c檔案

thttpd伺服器對於請求處理,請求響應和cgi子程式的執行時間是有限制的,這裡面限制是由timer.c檔案中的函式完成的。計時器的結構為 typedef struct timerstruct timer 由此可知此結構為乙個雙向鍊錶結構。timer proc為延時處理函式。client data為...