HTTP概念
HTTP協議用於客戶端與服務端之間的通信(應用HTTP協議,必定有一端是客戶端,另一端是服務器端)
通過請求和響應的交換達成通信(必須由客戶端發起通信,服務器端在沒有接收到請求之前不會發送響應)
發送報文的結構:
//包含了請求方法、請求資源路徑、HTTP協議版本
GET(POST) /mini.png HTTP/1.1
//請求首部字段
Host:120.25.226.186:32812 客戶端想訪問的服務器主機地址
User-Agent:Mozilla/5.0 客戶端的類型,客戶端的軟件環境
Accept:text/html 客戶端所能接收的數據類型
Accept-Language:zh-cn 客戶端的語言環境
Accept-Encoding:gzip 客戶端支持的數據壓縮格式
//內容實體
name=user&ag=12
響應報文的結構:
//包含了HTTP協議版本、狀態碼、狀態碼的原因說明
HTTP/1.1 200 ok
//響應首部字段
Server:Apache-Coyote/1.1 服務器類型
Content-Type:image/jpeg 返回數據的類型
Content-Length:56811 返回數據的長度
Date:Mon,23,Jun 2014 12:54:52 GMT 響應的時間
//主體
data....
HTTP是不保存狀態的協議(協議本身不會保留之前一切的請求或響應)
請求URI定位資源
發起HTTP請求的方法
GET:獲取資源
客戶端—-GET(訪問某個資源)—–>服務器POST:發給服務器的參數全部放在請求體中
客戶端—-POST(上傳某個信息)—–>服務器PUT:傳輸文件(PUT自身不帶驗證機制,任何人都可以傳,不安全)
客戶端—-PUT(上傳一個文件)—–>服務器HEAD:獲得報文首部(不返回主體部分,只返回響應的首部)
客戶端—-HEAD(把那個相關信息告訴我)—–>服務器DELETE:刪除文件(與PUT相反,不安全)
客戶端—-HEAD(把那個文件刪除)—–>服務器OPTIONS:詢問支持的方法(查詢對請求URI指定資源支持的方法)
客戶端—-OPTIONS(這個資源支持哪些方法訪問)—–>服務器
持久連接節省通信量(建立1次TCP連接後可進行多次請求和響應)
- 持久性連接的特點:只要任意一端沒有明確提出斷開,則保持TCP的連接
- 管線化方式:所謂的管線化方式是指同時並行發送多個請求,而不需要一個接一個地等待響應
使用Cookie的狀態管理
- Cookie技術通過在請求和響應報文中寫入cookie信息來控制客戶端的狀態
- Cookie會根據從服務器端發送的響應報文內的一個叫Set-Cookie的首部字段信息,通知客戶端保存Cookie,當下次客戶端再次請求時,客戶端會自動在請求的報文中加入Cookie值發送出去
- 服務器端發現客戶端發來的Cookie時,會去檢查是哪一個客戶端發送的請求,對比服務器上的記錄,最後得到之前的狀態信息
(1)請求報文(沒有Cookie)信息的狀態
GET /mini.png HTTP/1.1
Host:120.25.226.186:32812
*首部字段內沒有Cookie的相關信息
(2)響應報文(服務器端生成Cookie信息)
HTTP/1.1 200 ok
Date:Mon,23,Jun 2018 12:54:52 GMT
Server:Apache
<Set-Cookie:sid=123123123; path=/;expires=Wed,=>Jun 2018 12:54:52 GMT>
Content-Type:image/jpeg
(3)請求報文(自動發送保存着的Cookie信息)
GET /mini.png HTTP/1.1
Host:120.25.226.186:32812
Cookie:sid=123123123
HTTP返回結果的狀態碼
狀態碼 | 類別 | 原因短語 | 備註 |
---|---|---|---|
200 | 成功狀態碼 | OK | |
204 | 成功狀態碼 | NO Content | 請求成功但是沒有資源可返回 |
206 | 成功狀態碼 | Partial Content | 對資源某一部分的請求 |
301 | 重定向狀態碼 | Moved Permanently | 資源的URI不對 |
302 | 重定向狀態碼 | Found | 臨時重定向 |
303 | 重定向狀態碼 | See Other | 資源存在多個URI,應使用GET方法請求 |
304 | 重定向狀態碼 | Not Modified | 資源已找到,但未符合條件 |
307 | 重定向狀態碼 | Temporary Redirect | 臨時重定向 |
400 | 客戶端錯誤 | Bad Request | 請求報文中語法不對 |
401 | 客戶端錯誤 | Unauthorized | 該請求需要HTTP認證 |
403 | 客戶端錯誤 | Forbidden | 不能訪問該資源 |
404 | 客戶端錯誤 | Not Found | 服務器上沒有該資源 |
500 | 服務器錯誤 | Internal Server Error | 服務器內部資源不對 |
503 | 服務器錯誤 | Service Unavailable | 服務器超負荷或停機維護 |
與HTTP協作的web服務器
- 虛擬主機:是指在網絡服務器上分出一定的磁盤空間,用戶可以租用此部分空間,以供用戶放置站點及應用組件,提供必要的數據存放和傳輸功能。
通信數據轉發
代理:是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端“中間人”的角色,接收由客戶端發送的請求並轉發給其他服務器,同時也接受其他服務器返回的響應轉發給客戶端
- 代理不會改變請求的URI,會直接發送給持有資源的服務器(源服務器)
- 代理服務器轉發時,需要附加Via首部字段來標記經過的主機信息
- 緩存代理(常說的鏡像):代理服務器轉發響應時,緩存代理會預先將資源的副本保存在代理服務器上,當代理服務器再次收到相同資源的請求時,代理服務器可直接將之前緩存的資源作爲響應返回
- 透明代理:轉發請求會響應時,不對body做任何加工的代理類型叫透明代理,對報文內容做加工的代理叫非透明代理
網關:轉發其他服務器通信數據的服務器,接收從客戶端發送來的請求時,他就像自己擁有資源的服務器一樣對請求進行處理
- 網關能使通信新路上的服務器提供非HTTP協議服務
- 利用網關能夠提高通信安全性,可以在客戶端與網關之間的通信線路上加密以確保連接安全(比如網關可以關聯數據庫)
- 網關能使通信新路上的服務器提供非HTTP協議服務
隧道:在相隔甚遠的客戶端和服務器之間進行中轉,並保持雙方通信連接的應用程序
- 隧道可按要求建立一條與其他服務器通信的線路,可以使用SSL等加密手進行通信,隧道的目的就是確保客戶端能與服務器進行安全的通信
- 隧道本身不對HTTP做任何解析,保持原樣中轉給服務器