HTTP請求基礎
格式化數據塊稱為HTTP報文
請求報文
:從客戶端發往服務器的HTTP報文,只有請求起始行
+請求首部
,沒有請求主體
響應報文
:從服務器發往客戶端的報文,包含響應起始行
+響應首部
+響應主體
HTTP報文通過傳輸控制協議(TCP)
連接:
- 無差錯的數據傳輸
- 按序傳輸
- 未分段的數據流
HTTP事務
=請求命令(HTTP方法)+響應結果
從輸入URL到瀏覽器顯示全過程
簡單描述:通過URL獲取目標IP地址+TCP端口號 >> 建立TCP/IP連接 >> 傳輸HTTP報文
URL舉例:(HTPP端口默認80,HTTPS端口默認443)
index.html
表示web服務器的資源,資源名稱為統一資源標識符(URI)
瀏覽器處理請求圖解:
- 輸入URL
- 瀏覽器從URL
解析服務器主機名
IP解析
:通過DNS服務獲取服務器主機名對應的IP地址- 從URL
解析端口號
- 與IP對應的端口
建立TCP連接
- 瀏覽器發送一條HTTP請求報文
- 服務器向瀏覽器回送一條HTTP響應報文
- 關閉連接,瀏覽器顯示頁面
URL語法、URL組件及含義
URL結構:方案://服務器位置/路徑
用怎樣的方案請求哪個地方的什么資源,簡稱(我瞎定義的):How
- Where
- What
URL語法通用格式:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
(由多個組件段組成)
-
<scheme>
:方案名(協議)不區分大小寫,也就是說HTTP://...
=http://...
。 -
<user>:<password>
:FTP協議需要用戶名和密碼,比如:ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
(如沒有提供,瀏覽器會給一個默認值) -
<host>:<port>
:主機和端口號 -
/
將URL劃分為一些路經段(<path>;<params>
),path和params為一組,用;
隔開。比如:http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
-
<query>
為查詢組件,用&
連接多個鍵值對。
-
<frag>
為片段組件,前面跟一個#
URL快捷方式
相對URL
URL有兩種方式:絕對的
和相對的
。
解析相對URL的第一步:分解URL
,即:將相對URL和基礎URL劃分成組件段。
將相對URL轉換成絕對URL如圖:缺啥補啥
(相對URL中缺的組件就用基礎URL中的組件段補上)
自動擴展URL
瀏覽器主動進行主機名擴展
(匹配自動補齊)、歷史訪問擴展
(匹配URL前綴)
URL編碼和字符規則
基于適配各種不同的協議
+ 供人類閱讀
+ URL完整
的需求,引入了轉義機制,將不安全字符編碼為安全字符再進行傳輸。
用US-ASCII字符集集成轉義序列對數據進行編碼,實現可移植性和完整性。
%
后跟著兩個表示字符ASCII碼
的16進制數,舉例:
保留字符:
URL方案