文章目錄
一、瞭解HTTP
1.1HTTP原理
當我們在網頁上輸入一個網址(URL)時,Web頁面當然不能憑空顯示出來。根據Web瀏覽器地址欄中指定的URL,Web瀏覽器從Web服務器端獲取文件資源等信息,從而顯示Web頁面。
Web使用一種名爲HTTP的協議作爲規範,完成從客戶端到服務端等一系列運作流程。而協議是指規則的約定。可以說,Web是建立在HTTP(超文本傳輸協議)協議上通信的。
1.2客戶端與服務器端
類似通過發送請求服務器資源的Web瀏覽器或者其他應用程序等,都可以稱作客戶端;而接受到客戶端請求後,響應客戶端,返回給哭護短響應資源等稱作服務器端。
1.3爲何要有應用層?
通過學習完TCP/IP,我們知道數據能從客戶端進程經過選擇跨網絡傳送到服務器端進程,可是僅僅把數據從A端發到B端就完了嗎?就像我們在淘寶上賣完東西后,用完還要給賣家評論打分。我們把數據從A端B端只是完成了快遞的功能,而兩端還要對數據進行加工處理或者使用,所以我們還需要一層協議,這層協議只關心應用細節,不關心通信細節。這就是我們的HTTP協議解決的事情。
1.4認識URL
使用http:或https:等協議方案名獲取訪問資源時要指定協議類型。不區分字母大小寫,最後附一個冒號(😃
登陸信息(認證)
指定用戶名和密碼作爲從服務器端獲取資源時必要的登錄信息(身份認證)。此項是可選項。
服務器地址
使用絕對URI必須指定待訪問的服務器地址。地址可以是類似hackr.jp這種DNS可解析的名稱,或是192.168.1.1這類的IPv4地址名,還可以是[0:0:0:0:0:0:1]這樣用方括號括起來的IPv6地址名。
服務器端口號
指定服務器連接的網絡端口號。此項也是可選項,若用戶省略則自動使用默認端口號。
帶層次的文件路徑
指定服務器上的文件路徑來定位特指的資源。
查詢字符串
針對已指定的文件路徑內的資源,可以使用查詢字符串傳入任意參數。此項可選。
片段標識符
使用片段標識符通常可標記出已獲取資源中的子資源。但在RFC中並沒有明確規定其使用方法。該項也爲可選項。
二、深入學習HTTP
1.HTTP協議格式
1.1HTTP請求
- 首行:[方法] + [URL] + [版本]
- Header:請求的 屬性,冒號分割的鍵值對,每組屬性之間使用\n分隔,遇到空行表示Header部分結束
- Body:空行後面的內容都是Body,Body允許爲空字符串,如果Body存在,則在Header中會有一個Content-Length屬性來表示Body的長度
1.2HTTP響應
- 首行:[版本號] + [狀態碼] + [狀態碼解釋]
- Header: 請求的屬性,冒號分割的鍵值對;每組屬性之間是用\n來分隔,遇到空行這表示Header部分結束
- Body:空行後面的內容都是Body。Body允許爲空字符串。如果Body存在,則在Header中會有一個Content-Length屬性來表示Body的長度;如果服務器返回一個了html頁面,那麼html頁面內容就是在body中。
2.HTTP常見的方法
方法 | 說明 | 支持的HTTP協議版本 |
---|---|---|
GET | 獲取資源 | 1.0、1.1 |
POST | 傳輸實體主體 | 1.0、1.1 |
PUT | 傳輸文件 | 1.0、1.1 |
HEAD | 獲得報文首部 | 1.0、1.1 |
DELETE | 刪除文件 | 1.0、1.1 |
OPTIONS | 詢問支持的方法 | 1.1 |
TRACE | 追蹤路徑 | 1.1 |
CONNECT | 要求用隧道協議連接代理 | 1.1 |
LINK | 建立和資源相關的聯繫 | 1.0 |
UNLINE | 斷開連接關係 | 1.0 |
其中最常用的就是GET和POST方法。
3.HTTP的狀態碼
狀態碼 | 類別 | 原因短語 |
---|---|---|
1XX | 信息狀態碼 | 接受的請求正在處理 |
2XX | 成功狀態碼 | 請求正常處理完畢 |
3XX | 重定向狀態碼 | 需要進行附加操作以完成請求 |
4XX | 客戶端服務錯誤狀態碼 | 服務器無法處理請求 |
5XX | 服務器錯誤狀態碼 | 服務器處理請求出錯 |
例如:
200:服務器正確處理完請求,並返回響應
301/302/307:重定向,服務端響應3XX重定向狀態碼,location包頭,之後瀏覽器會自行跳轉到location的網址。
400:客戶端錯誤
404:找不到資源
405:不支持的客戶端請求方法
500:服務器錯誤
502:網關錯誤
4.HTTP常見的Header
- Content-Type: 數據類型(text/html等)
- Content-Length: Body的長度
- Host: 客戶端告知服務器, 所請求的資源是在哪個主機的哪個端口上;
- User-Agent: 聲明用戶的操作系統和瀏覽器版本信息; referer: 當前頁面是從哪個頁面跳轉過來的;
- location: 搭配3xx狀態碼使用, 告訴客戶端接下來要去哪裏訪問;
- Cookie: 用於在客戶端存儲少量信息. 通常用於實現會話(session)的功能;
5.Cookie和Session
5.1Cookie
我們在訪問有的網上資源的時候往往需要經過認證的賬戶才能訪問,而且要一直保持在線狀態,所以,cookie是一種在瀏覽器端解決的方案,將登陸認證之後的用戶信息保存在本地瀏覽器中,後面每次發起http請求,都會自動攜帶該信息,就能達到認證用戶,報紙用戶在線的作用。
5.2 Session
將用戶敏感信息放到本地瀏覽器中,能解決一定的問題,但是又引進了新的安全問題,一旦cookie丟失,用戶信息泄露,很容易造成跨站攻擊,所以有了另一種解決方法,將用戶敏感信息保存至服務器,而服務器本身採用md5算法或者相關算法生成唯一值(session id),將該值保存在客戶端瀏覽器,隨後,客戶端的後續請求,瀏覽器都會自動攜帶該id,進而再在服務器端認證,進而達到狀態保持的效果。
5.3 Cookie和Session的區別
- Cookie以文本文件格式存儲在瀏覽器中,而session存儲在服務端
- 因爲每次發起Http請求,都要攜帶有效Cookie信息,所以Cookie一般都有大小限制,以防止增加網絡壓力,一 般不超過4k
- 可以輕鬆訪問cookie值但是我們無法輕鬆訪問會話值,因此session方案更安全
6 HTTP和HTTPS的區別
- https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
- http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。