最近做乙個平台的搭建,需要做頁面展示,就接觸了nginx(nginx是後話,之後會慢慢深入編寫),在配置的過程中我對http產生了很多的興趣,之前做過介面測試,對http有點了解,但是不深入。經過這一段時間的接觸,對http有了一定的了解。
http,按照官方的話來說就是—超文字傳輸協議(http,hypertext transfer protocol)。這樣說,未免太過官方,依照我個人的理解,從幾點來說。
1、什麼是http協議:
http是一種請求/響應式的協議。乙個客戶機與伺服器建立連線後,傳送乙個請求給伺服器;伺服器接到請求後,給予相應的響應資訊。http 的第一版本 http/0.9是一種簡單的用於網路間原始資料傳輸的協議;
http/1.0由 rfc 1945 定義 ,在原 http/0.9 的基礎上,有了進一步的改進,允許訊息以類 mime 資訊格式存 在,包括請求/響應正規化中的已傳輸資料和修飾符等方面的資訊;
http/1.1(rfc2616) 的要求更加嚴格以確保服務的可靠性,增強了在http/1.0 沒有充分考慮到分層**伺服器、高速緩衝儲存器、持久連線需求或虛擬主機等方面的效能;
安全增強版的 http (即s-http或https),則是http協議與安全套介面層(ssl)的結合,使http的協議資料在傳輸過程中更加安全。
2、tcp/ip:
提到http就不得不說道tcp/ip,tcp/ip協議是分層的,從底層至應用層分別為:物理層、鏈路層、網路層、傳輸層和應用層,是我在網上找的,還算畫的清楚如下圖所示:
從應用層至物理層,資料是一層層封裝,封裝的方式一般都是在原有資料的前面加乙個資料控制頭,資料封裝格式如下:
其中,對於tcp傳輸協議,客戶端在於伺服器建立連線前需要經過tcp三層握手,過程如下:
http是應用層的協議。
3、http基礎知識
1) http結構
http 分成了三部分:http://host[:port][abs_path]
其中,http就是指咱們上述的指的http協議所定位的網路資源了。
host指的是主機網域名稱和ip位址
port指的是指定乙個埠號,擁有被請求資源的伺服器主機監聽該埠的tcp連線。如果port是空,則使用預設的埠80。當伺服器的埠不是80的時候,需要顯式指定埠號。
abs_path指的是請求資源的uri(uniform resource identifier,統一資源定位符),如果url中沒有給出abs_path,那麼當它作為請求uri時,必須以「/」的形式給出。通常這個工作瀏覽器就幫我們完成了強調內容
瀏覽器與伺服器連線的一般過程:
(瀏覽器自動加)->dns(domain name sevice)->***.***.***.**:80
socket socket = new socket("***.***.***.**:80", 80);
2) uri與urluri純粹是乙個符號結構,用於指定構成web資源的字串的各個不同部分。
url是一種特殊型別的uri,它包含了用於查詢某個資源的足夠的資訊。
其他的uri,例如:[email protected],則不屬於url,因為它裡面不存在根據該識別符號來查詢的任何資料。這種uri稱為urn(通用資源名)。
3) http請求
http請求就是,客戶端通過傳送http請求向伺服器請求對資源的訪問
http請求由3部分組成,分別是:請求行,訊息報頭,請求正文。
請求行:請求行以乙個方法符號開頭,後面跟著請求的uri和協議的版本,以crlf作為結尾。請求行以空格分隔,除了作為結尾的crlf外,不允許出現單獨的cr或lf字元,格式如下:
method 表示請求的方法;
request-uri 是乙個統一資源識別符號,標識了要請求的資源;
http-version 表示請求的http協議的版本(關於http各個版本的不同,我會在另一篇部落格中體現)
crlf 表示回車換行
例如: get /test.html http/1.1(crlf)
4) http 請求方法
HTTP 基礎知識
具體去看原文 你應該知道的http基礎知識 1.http請求報文格式 http的請求報文分為三個部分請求行 請求頭和請求體。1.1 請求行 請求行 request line 分為三個部分 請求方法 請求位址和協議及版本,以crlf r n 結束。http 1.1定義的請求方法有8中 get post...
HTTP 基礎知識
標籤位於文件的頭部,不包含任何內容。標籤的屬性定義了與文件相關聯的名稱 值對。標籤永遠位於 head 元素內部。http equiv 屬性為名稱 值對提供了名稱。並指示伺服器在傳送實際的文件之前先在要傳送給瀏覽器的 mime 文件頭部包含名稱 值對。當伺服器向瀏覽器傳送文件時,會先傳送許多名稱 值對...
HTTP基礎知識
get 用於請求訪問已經被uri 統一資源識別符號 識別的資源,可以通過url傳參給伺服器 post 用於傳輸資訊給伺服器,主要功能與get方法類似,但一般推薦使用post方式。put 傳輸檔案,報文主體中包含檔案內容,儲存到對應uri位置。head 獲得報文首部,與get方法類似,只是不返回報文主...