文章目錄
在此之前我們先來了解清楚URL 和URI的區別和聯繫吧
URI(統一資源標識符)和URL(統一資源定位符)
URL定義
在萬維網上,每一個信息資源在網絡上都有統一且在網上唯一的地址,該地址就叫UEL(Unifrom Resourse Locator),它是www的統一資源定位標誌,就是指網絡地址
URL格式
- 由以冒號隔開的兩大部分組成,並且在URL中的字符對大寫或小寫沒有要求
- URL由三部分組成:資源類型、存放資源的主機域名、資源文件名
- 另一種說法:協議、主機、端口、路徑.
- 使用HTTP的URL的一般格式
URL的一般語法格式爲:(帶方括號[]的爲可選項):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
- 例如http://www.baidu.com:80/
解剖URL各個字段的含義
- protocol(協議)
協議名 | 用途 |
---|---|
http | 通過HTTP訪問資源,格式HTTP:// |
https | 通過安全的HTTPS訪問該資源,格式HTTPS:// |
此處只列舉出了兩種協議,並非只有這兩種
- hostname(主機名)
是指存放資源的服務器的域名系統(DNS)主機名或IP地址.有時,在主機名前也可以包含連接到服務器所需的用戶名和密碼(格式:username:password@hostname)
- port(端口號)
http的默認端口是80
- path(路徑)
由零個或者多個“/” 字符隔開的字符串,一般用來表示主機上的一個目錄或文件地址.
- parameters(參數)
這是用於指定特殊參數的可選項
- query(查詢)
可選,用於給動態網頁(如使用CGI、ISAPI、PHP/JSP/ASP/ASP。NET等技術製作的網頁)傳遞參數,可有多個參數,用“&”符號隔開,每個參數的名和值用“=”符號隔開。
- fragment(信息片段)
字符串,用於指定網絡資源中的片斷。例如一個網頁中有多個名詞解釋,可使用fragment直接定位到某一名詞解釋。
關於URI
- 在電腦術語中,統一資源標識符(Uniform Resource Identifier,URI)是一個用於標識某一互聯網資源名稱的字符串。
- 該種標識允許用戶對任何(包括本地和互聯網)的資源通過特定的協議進行交互操作。URI由包括確定語法和相關協議的方案所定義。
URI格式
- 一個絕對URI的格式
- URI格式由URI協議名(例如HTTP、FTP、mailto、file),一個冒號,和協議對應的內容所構成。
- URI文法同時也就各種原因對協議內容加以其他的限制,例如,保證各種分層協議之間的協同性。百分號編碼也爲URI提供附加信息。
- URL的格式由下列三部分組成
- 第一部分是協議(或稱爲服務方式);
- 第二部分是存有該資源的主機IP地址(有時也包括端口號);
- 第三部分是主機資源的具體地址。
- 具體URI的格式如下:
協議名]://[用戶名]:[密碼]@[服務器地址]:[服務器端口號]/[路徑]?[查詢字符串]#[片段ID]
二者的區別與聯繫
-
URL是一種URI,它標識一個互聯網資源,並指定對其進行操作或獲取該資源的方法。
-
可能通過對主要訪問手段的描述,也可能通過網絡“位置”進行標識。
-
URI可被視爲定位符(URL),名稱(URN)或兩者兼備。
-
統一資源名(URN)如同一個人的名稱,而統一資源定位符(URL)代表一個人的住址。換言之,URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用於命名,而不指定地址。
而我們所說的URI(統一資源標識符)是用字符串標識某一互聯網資源,URL表示資源的地址(互聯網上所處的位置),
因此他們具有包含關係URL是URI的子集
URL和URI之間的主要區別 -
URL是統一資源定位器,用於標識資源;URI(統一資源標識符)提供了更簡單和可擴展的標識資源的方法
-
URL是URI的子集
-
URL指定要使用的協議類型,而URI不涉及協議規範。
HTTP
你知道HTTP協議的用途是什麼嗎?
其實HTTP協議和TCP/IP協議族內的其他衆多的協議相同,用於客戶端和服務器之間的通信.
- 其中請求訪問文本或圖像等資源的一方是客戶端,而提供資源響應的一端是服務器端
那麼問題又來了,HTTP的報文的格式是怎樣的呢?
HTTP報文格式
請求報文的格式
- 基本結構簡介
-
大體結構圖
-
抓包結果
- 對比結構圖和抓包結果我們可以看到請求報文的大體格式都是固定的,其中方法名和URL既版本號都是不可或缺的.
- 其中方法 是面向對象技術中使用的專門名詞.就是對所請求的對象進行的操作,因此這些方法實際上是一些命令,因此,請求報文的類型是由它所採用的方法決定的
那麼請求報文的方法都有那些呢?
- HTTP請求報文方法總結
方法(操作) | 意義 |
---|---|
OPTION | 請求一些選項的信息 |
GET | 請求讀取由URL所標誌的信息 |
HEAD | 請求讀取由URL所標誌的信息的首部 |
POST | 給服務器添加信息(流程) |
PUT | 給指明的URL下存儲一個文檔 |
DELETE | 刪除指明的URL所標誌的資源 |
TRACE | |
CONNECT | 用於代理服務器 |
有請求當然就有響應了,那麼http響應報文的格式是什麼樣的呢?
http響應報文的格式
- 基本結構簡介
- 大體結構圖
- 抓包結果
- 其中在開始行中的短語用來對狀態碼進行簡短的解釋
那你知道HTTP 響應的狀態碼還有那些嗎?
讓我們來總結一下吧
- 首先說明狀態碼都是三位數字
狀態碼 | 含義 |
---|---|
1XX: | 表示通信信息的,如請求收到了或正在進行處理 |
2XX | 表示成功.如接受或知道了 |
3XX | 表示重定向,表示要完成請求還必須採取進一步的行動 |
4XX | 表示客戶端的差錯:如請求中有錯誤的語法或者不能完成. |
5xx | 表示服務器的差錯,如服務器失效無法完成請求 |
- 其中最常見的幾種如下表所示
狀態碼 | 含義 |
---|---|
200 | 表示OK(訪問成功) |
302 | Found表示重定向/Loaction 字段表示重定向到那個url目標頁(頁面切換) |
303 | See Other 重定向/Loaction 字段表示重定向到那個url目標頁(頁面切換) |
403 | Forbidden 表示用戶沒有權限訪問 |
502 | Bad Gateway 服務器掛了 |
504 | Gateway Timeout 服務器響應超時 |
那麼HTTP會保存連接的相關信息嗎?
- 答案是不會(適用於初始的網絡),因爲HTTP是不保存狀態的協議,既無狀態協議,也就是說HTTP這個協議對於發送過來的請求或響應都不做持久化處理
可是隨着Web的不斷髮展,因無狀態而導致業務處理變得棘手的情況增多了。
比如:你登錄你的賬號在某寶的商場購物時,即使跳到了該站的其他頁面後該網站依舊能夠保持你的登錄狀態.
那麼如何才能保證這種保持狀態的功能呢?
Content-Type:
描述了body的部分數據格式的類型 txt/html
Content-Length:
描述body 部分的長度(字節)
Host:
客戶端告知服務器, 所請求的資源是在哪個主機的哪個端口上;
User-Agent:
描述操作系統和瀏覽器版本信息;
手機端看到的頁面並不是根據User-Agent來吐出一個單獨的比較窄的頁面而是完全靠前端的技術來實現(響應式編程)
referer:
當前頁面是從哪個頁面跳轉過來的;
location:
搭配3xx狀態碼使用, 告訴客戶端接下來要去哪裏訪問;
Cookie:
下面仔細介紹
Cookie(用於存儲用戶身份信息的結構)
- 當然了,這裏的Cookie和曲奇餅沒有什麼關係,只是兩者拼寫相同而已
萬維網站點使用Cookie來跟蹤用戶,Cookie表示在HTTP服務器和客戶之間傳遞的狀態信息
使用Cookie的網站服務器爲用戶產生一個唯一的識別碼,網站就能夠掌握該用戶在該網站的活動
-
上圖是我在網頁端登錄京東賬號時的抓包結果
-
我們可以看到報文的最下面一條是Cookie字符串
-
當我點擊某一款手機的時候,瀏覽器將帶有我身份信息的Cookie字符串添加在請求報文中發送給服務器,服務器收到請求後檢查發現是本人請求某個頁面.
-
過程如下圖
到這裏就要提一下Session了
Session和Cookie/推薦閱讀
那麼當你往瀏覽器的搜索欄中輸入內容之後,發生了什麼事情呢?爲什麼你在瀏覽器中輸入內容後,瀏覽器會給你返回你要的內容呢?這個過程是什麼實現的呢?然我們去看看HTTP的操作過程吧
HTTP的操作過程
- 用戶點擊URL https://www.baidu.com/index.htm之後發生的事情
- 1.瀏覽器分析超鏈指向的頁面的URL
- 2.瀏覽器向DNS請求解析www.baidu.com的IP地址
- 3.域名系統DNS解析出百度的IP地址
- 4.瀏覽器與服務器建立TCP連接
- 5.瀏覽器發出取文件命令,GET /index.htm。
- 6.服務器給出響應,把文件index.htm發給瀏覽器
- 7.TCP連接釋放
- 8.瀏覽器顯示""文件index.htm中的所有文件
注意
- HTTP協議本身是無連接的,雖然它使用了面向連接的TCP向上提供的服務。