初步瞭解HTTP協議

簡介:
http,超文本傳輸協議(Hyper Text Transfer Protocol),用戶服務器和本地瀏覽器之間傳送協議,是基於TCP/IP通信協議來傳輸數據的(HTML、圖片、響應結果等)
【TCP/IP,Transmission Control Protocol /Internet Protocol  傳輸控制協議/因特網互聯協議。】
http是一個應用層的面向對象協議,由於其簡潔、快速的方式,適用於分佈式超媒體信息系統。

主要特點:
1、簡單快速:客戶端發送請求時,只發送請求方法和路徑,協議規模小,通信速度塊;
2、靈活:允許傳輸任意類型的數據對象,正常傳輸的類型由Content-Type標記;
3、無連接:限制每次連接只處理一個請求,服務器處理完客戶端請求,返回響應,並收到客戶端的應答後,就斷開此次連接;
4、無狀態:對於事務處理沒有記憶能力。因爲缺少狀態,如果後續的處理需要前面的信息,則它必須重傳,這樣會導致每次連接傳送的數據量增大。不過,因爲沒有狀態,服務器不需要之前的信息時,服務器應答的速度就較快。
5、HTTP可以用戶B/S、C/S模式;

HTTP之URL
HTTP使用URI(Uniform Resource Identifiers)統一資源標識來傳輸數據和建立連接。其中URL (Uniform Resource Locator)統一資源定位符,是一種特殊的URI,一個URL包含如下部分:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

1、協議部分:http://
2、域名:www.aspxfans.com
3、端口:8080,端口的分配時需要注意,某些端口已經被特定的服務所佔用,詳細請參考該文章介紹【https://blog.csdn.net/qq_37788558/article/details/71054874】
4、虛擬目錄:從域名後第一個‘/’到最後一個‘/’之間,爲虛擬目錄
5、文件名:從最後一個‘/’到‘?’之間
6、變量名:第一個而變量名從?開始,變量名之間使用&連接,數字和字符不改變,特殊符號改變,顯示爲%xx,其中,xx爲該符號的ASCII碼對應的16進制數。
7、錨部分:從‘#’開始到最後,都是錨部分
在一個URL中,協議+域名爲必須包含部分。

URI - URL  - URN
1、URI,統一資源標識符,用來唯一標識一個資源:
    由訪問資源的命名機制 + 存放資源的主機名 + 資源自身的名稱,由路徑表示
2、URL 統一資源定位器,具體URI
     由協議 + 存放由該資源的主機IP地址 + 主機資源具體地址,如目錄和文件名等;
3、URN (Uniform resource name), 統一資源命名,通過名字來標識資源,如:mailto:[email protected]
URI時一種抽象的,高層次概念定義統一資源標識,而URL和URN則是具體的資源標識方式。URL和URN都是一種URLI,

HTTP之 請求消息 Request
客戶端發出的http請求,一般包含:請求行(qreuest line)、 請求頭部(header)、空行和數據組成。









如下GET 請求 ,使用Charles抓取的request:
GET /234sdffsd/jpg HTTP/1.1
Host:img.mukewang.com
User-Agent:Mozilla/5.0(Windows NT 10.0 WOW64) ...
Accept:image/webp, image/*, */*; q=0.8
Referer:http://www.imooc.com/
Acept-Emcoding:gzip, deflate
Accept-Language:zh-CN, zh; q=0.8

解析:
請求行,用來說明請求類型,要訪問的資源以及所使用的HTTP版本
請求頭部:HOST指出請求的目的地, User-Agent,出服務器和客戶端腳本都能訪問它,是瀏覽器類型檢測的基礎,由你的瀏覽器客戶端來定,在每一個請求中自動發送
空行:請求頭部後面的空行是必須的,即使之後的請求數據爲空,空行也是必須的
數據:請求數據也叫主體,可以添加任意的其他數據

如下是POST請求的示例:
POST / HTTP1.1
HOST:www.wrox.com
User-Agent:Mozilla/5.0(Windows NT 10.0 WOW64) ...
Content-Type:application/x-www-form-urlencoded
Content-Lenght:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley
第一部分:請求行,指明請求類型post,,協議版本http1.1
第二部分:請求頭部,2-6行
第三部分:空行
第四部分:請求數據

HTTP之 響應消息 Response
響應消息也由4部分構成:分別爲狀態行,消息報頭, 空行和響應正文
HTTP/1.1 200 okDate: Fri, 22 May 2009 06:07:08 GMTContent-Type: text/html; charset=UTF-8
<html> <head></head> <body> <!-- body content --> </body></html>
第一行:狀態行,由HTTP協議版本號,狀態碼,狀態消息三部分組成
第二行:消息報頭,用來說明服務器的一些附加信息(2-3行)
第三部分:空行,消息報頭後面的空行是必須的
第四部分:響應正文,服務器返回給客戶端的文本消息。
HTTP之 狀態碼:
1xx:指示信息--表示已經接收,繼續處理
2xx:   成功--表示已被成功接收,理解、接受
3xx: 重定向--要完成請求必須進一步的操作
4xx: 客戶端錯誤--請求語法錯誤或鑑權不過
5xx: 服務器錯誤--服務器啓動失敗,或內部錯誤
200 ok                  //客戶端請求成功
301 redirect            //永久性跳轉
302 redirect            //暫時性跳轉
400 Bad Request         //客戶端請求語法錯誤,不被服務器理解
401 Ubauthorized        //請求未經授權,這個狀態碼必須和WWW-Authenticate報頭域一起使用
404 Not Found           //請求資源不存在,如輸入了錯誤的資源
500 Internal Server Error //服務器內部錯誤
503 Server Unavaliable    //服務器當前不能處理請求,稍後重試
工作原理:
HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法,URL,協議版本,請求頭部和請求數據。服務器以一個狀態行作爲響應,內容包含協議版本,成功或錯誤碼,服務器信息,響應頭部和響應數據。
1、客戶端連接到WEB服務器:
一個HTTP客戶端,通常是web瀏覽器,建立一個TCP套接字連接
2、發送HTTP請求:
通過TCP套接字,客戶端向服務端發送文本請求報文
3、服務器端接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源副本寫到TCP套接字,由客戶端讀取。
4、釋放連接TCP
若Connection模式爲close,則服務器主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接; 如果模式爲keep-alive,則該連接保持一段時間,在該時間內可以繼續接受請求(超過session,釋放連接)。
5、客戶端瀏覽器解析服務器端返回內容:
客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態碼, 然後解析每一個響應頭,響應頭告知一下爲若干字的HTML文檔和文檔字符集。客戶端讀取響應數據並解析HTML,在瀏覽器窗口顯示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章