HTTP學習筆記(五)

2021-07-25 09:38:11 字數 2059 閱讀 5116

目前,市場上流行有很多web

伺服器軟體,每種伺服器都有自己的特點。我們在開發的過程中,經常要和它們打交道,所以了解它們的工作原理也是很重要的。

幾款比較流行的伺服器 

第三篇中有這樣的一張,它演示了客戶端和伺服器在發起事務時它們需要做的幾個事情。

這裡就詳細地談談伺服器在執行過程中會做什麼。

首先伺服器在完全執行起來之後,客戶端就可以向伺服器發起連線了(關於這個部分,大家可以看第三篇筆記)。現在的web

伺服器大多數都是多執行緒伺服器了,一般在伺服器上配置連線池,限制連線的數量,可以大大減輕伺服器的連線壓力,以保證網路服務的質量。

在這個階段,伺服器也會判斷客戶端的身份,比如一些有惡意行為的ip

位址,伺服器會拒絕建立連線。

接下來,伺服器就會開始接受客戶端發出的報文並解析它們(關於報文可以看第四篇筆記)。伺服器首先會讀取報文的起始行。從它請求的方法中以確定這個請求需要給予什麼樣子的響應,在這之後,伺服器就會去讀取uri

,確定資源的位址,最後在這行資訊中檢測客戶端使用的

版本,以確定首部的一些資訊解讀的方式。之後就是讀取各行的資訊,直到檢測到以

crlf

( carriage-return line-feed 回車換行)結束的標識。在這之後伺服器就會對請求開始處理了,比如像post

中的一些資料傳遞到程式中。

此時,伺服器要開始很重要的步驟了,找到客戶端希望得到的資源,開始構建乙個特別的內容給客戶端,這些都是程式處理的部分了。當然,這裡請求的資源使用路徑都是伺服器上的虛擬路徑,不是伺服器檔案系統上的絕對路徑。這個虛擬路徑恰好把資源封閉在乙個固定的路徑中,不讓訪問突破規定範圍。在linux

中有一種selinux的機制,程序只能訪問那些在他的任務中所需要檔案。

在確定了要傳送的內容之後,伺服器會構建乙個響應報文並傳送它們。這裡面通常會包括乙個響應主體的mime

型別響應主體的

content-length

以及響應主體頁面。傳送完畢後,伺服器會檢測這是不是乙個持久連線,並根據此,決定是不是要關閉連線。

我想凡是做過開發的人一定都遇到過字元編碼亂碼的問題。關於字元編碼的問題非常複雜。其中有一些就和web

伺服器接收和構建報文有關係。

乙個客戶端吧請求報文在傳送給伺服器時,可以在傳送前,在首部通過設定accept-charest

和accecpt-encoding

告訴伺服器自己期待的字元編碼方式。伺服器會根據這條資訊給予客戶端最優化的方案。但有時,亂碼依舊。而這些亂碼是從**來的呢?

這要從它的歷史說起了,最早的ascii碼並不支援中文,為了滿足我們國家的需要,有人對ansi(ascii的擴充)碼進行了擴充,製作了gb2312,後來發現

gb2312

不能顯示一些生僻的字,於是

gbk編碼就誕生了,在這之後,有進行了幾次擴充套件。

但是在ansi

編碼下,同乙個編碼值,在不同的編碼體系裡代表著不同的字,這就是意味著不同國家的人相互訪問**的時候,由於不同的編碼,我們就會看見不同的內容(大部分都是不知所云的亂碼)。

後來有了unicode編碼,每個符號對應乙個唯一的編碼,亂碼問題就不存在了。但是這樣做這個庫就非常龐大,utf-8可以根據不同的符號自動選擇編碼的長短,這樣又一次提高了字元編碼的效率。

所以,utf-8

應該是我們最好的選擇。如果我們使用

gb2312

,我們在

url傳遞中文資料時,就會變成一堆符號和數字,而我們採用

utf-8

時,就不會有這個問題。有時候,我們很少注意,自己在開發時,頁面本身的字元編碼格式。所以很多不同字元編碼定義,就讓伺服器不知所措了,有時候資料庫的字元編碼和接收的字元編碼又是不同的,這裡又一次造成了編碼的不和諧。

《HTTP權威指南》學習筆記 五

http權威指南 學習筆記 五 第五部分 內容發布與分發 發布和傳播web內容的技巧 第18章 web主機託管 內容 web託管環境中部署伺服器的若干方法,http對虛擬web託管的支援以及如何在地理上相距遙遠的伺服器之間複製內容。對內容資源的儲存 協調以及管理的職責統稱為web主機託管。主機託管是...

Web學習筆記 五 HTTP訊息

http訊息又叫http頭 http header 它由4部分組成 請求頭只出現在http請求中,常用的請求頭如下 1 hsot host請求報頭域主要用於指定被請求資源的internet主機和埠號,例如 host www.xxser.com 801 2 user agent user agent請...

網路學習筆記五 HTTP 原理了解

http 是乙個無狀態的協議。無狀態是指客戶機 web 瀏覽器 和伺服器之間不需要建立持久的連線,這意味著當乙個客戶端向伺服器端發出請求,然後伺服器返回響應 response 連線就被關閉了,在服 務器端不保留連線的有關資訊.http 遵循請求 request 應答 response 模型。客戶機 ...