應用層負責應用程序間的溝通,即定義了位於不同主機中的多個應用進程之間通信的協議。滿足我們日常的網絡需求,比如SMTP(電子郵件傳輸)、FTP(文本傳輸協議)、HTTP(超文本傳輸協議)
上面提到了協議二字,簡單來說,協議就是一種“約定”,比如我們一會兒在哪見面,我們會提前約定好地點。應用層中應用最廣泛的協議就是HTTP協議了。
HTTP協議
是客戶端和服務器的通信,必須要通過請求和響應的交換來達成通信,HTTP協議規定:客戶端先發出請求建立通信,服務器在沒有接收到請求時是不會響應的
HTTP的特點:
1.HTTP基於TCP/IP協議
2.通常使用的場景是基於CS/BS
3.無狀態無連接協議(後面有具體解釋)
HTTP的組成
由HTTP請求和HTTP響應組成
客戶端request:請求行、請求報頭、空行、請求正文
服務器response:響應行、響應報頭、空行、響應正文
請求行中:URI 、 version 、版本號,比如:HTTP/1.1
響應行中:
狀態碼:比如200(狀態碼解釋:OK//客戶端請求成功)
400 (狀態碼解釋:Bad Request//客戶端請求有語法錯誤,不能被服務器所理解)
報頭中放的是鍵值對(比如鍵:小聞,值:12345;小聞:12345就是一個鍵值對)
HTTP常見的Header
Content-Type:數據類型(比如text/html等)
Content-Length:Body的長度
Host:客戶端告知服務器,所請求的資源是在哪個主機的哪個端口上
User-Agent:聲明用戶的操作系統和瀏覽器版本信息
referer:當前頁面時從哪個頁面跳轉過來的
location:搭配3XX狀態碼使用,告訴客戶端接下去要去哪裏訪問
Cookie:用於在客戶端存儲少量信息,通常用於實現會話(session)的功能
HTTP的方法
請求資源的常見方法:GET方法通過請求行的URL傳參,POST方法通過請求正文傳參,下面更具體點:
方法 | 說明 | 支持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 |
HTTP的狀態碼
類別 | 原因短語 | |
---|---|---|
1XX | Informational(信息性狀態碼) | 接收的請求正在處理 |
2XX | Success(成功狀態碼) | 請求正常處理完畢 |
3XX | Redirection(重定向狀態碼) | 需要進行附加操作以完成請求 |
4XX | Client Error(客戶端錯誤碼) | 服務器無法處理請求 |
5XX | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
常見的狀態碼:
200 (OK) 請求成功[一般用於Get和Post請求]
404 (Not Found) 客戶端請求有語法錯誤,服務器無法處理請求
403 (Forbidden) 服務器收到請求,但拒絕服務
301 (Moved Permanently) 永久重定向(請求的資源被永久移動到新的URI)
302 (Redirect) 臨時重定向(資源被臨時移動。客戶端應繼續使用原有的URI)
504 (Bad GateWay) 充當代理服務器,未及時從遠端服務器獲取請求
URI 和 URL
URI統一資源標識符,是用來唯一標識一個資源
URL(Uniform Resource Locateor)統一資源定位器,每個網頁都有一個唯一的名稱標識,這個標識就叫做URL,簡單的說,URL就是Web地址,俗稱“網址”
它是具體的URI,不僅標識了一個資源,還知名如何定位這個資源,具有全球唯一性
URL格式由三部分組成:
協議、存放該資源的主機IP地址(有時也包括端口號)、主機資源的具體地址
Windows主機不區分URL大小寫,但是,Unix/Linux主機區分大小寫
無連接無狀態:簡化了服務器,不會造成不必要的連接佔用,但請求可能會傳輸重複信息
無連接:每次連接只處理一個請求。請求時建連接,請求完斷連接(服務器處理完客戶端的請求,並收到客戶端的應答後,斷開連接)這種方式不僅節約傳輸時間,還可儘快把資源釋放出來服務其他客戶端
無狀態:指協議對事物處理沒有記憶能力(也就是服務器並不直到客戶端是什麼狀態,每個請求都是獨立的)。不過也有缺點:假如你後面要繼續處理前面的,那就必須要重傳了,這類情況就會導致連接傳送的數據量大。但是如果不需要之前信息時,應答就比較快了)
Cookie\Set-Cookie