計算機網絡-http簡介

(一)http相關定義

1.http 協議

HTTP超文本傳輸協議是一個屬於應用層的面向對象的協議,同時是無狀態的,所以出現了 cookie 和 session 用來保存狀態數據。當使用 http 連接時,http1.0默認設置Connection: keep-alive可以不斷開重複使用連接。

2.http 請求過程

web 前端:瀏覽器輸入url回車,發送 request 獲取到該 url 對應response 中的 html 數據,分析數據,對其中的圖片、js、css 再次發送 request 請求獲取,所有數據獲取完畢顯示出網頁。
這裏寫圖片描述
圖中使用 charles 抓包工具
android、ios 等app前端:通常用 get 或 post 發送 request 請求,server 處理後返回response 帶 xml 或 json 格式數據,app 前端進行解析。

3.代理服務器

數據請求有可能經過代理服務器,才進入server。代理服務器相當於中介,既是 client 又是 server。
代理服務器的作用:
1.翻牆,越過國內防火牆,訪問一些被屏蔽的網站,主要原因是國內防火牆沒有屏蔽這個代理服務器,而這個代理服務器又可以訪問被屏蔽的網站。
2.緩存,對部分數據可以進行緩存,減少 server 負擔,提升訪問速度。
3.匿名訪問,代理服務器可以代發請求而不保存原始發送點數據,較難查到請求方。
4.進行數據分析,比如使用 Charles 進行請求數據抓取,所以請求通過 charles 後可以進行請求數據分析抓取。
5.權限控制,通過代理服務器,可以設置部分網站無法訪問,比如部分公司禁止訪問淘寶等網站。

(二)http 消息結構

1.request 消息

瀏覽器訪問http://blog.csdn.net/wangpeifeng669/article/details/38957761
這裏寫圖片描述
這裏寫圖片描述
(1)請求行
Method:請求方法,如Get、Post 等
path-to-resource:請求資源位置,如/wangpeifeng669/article/details/38957761
version-number:http 協議版本號,通常是1.1

(2)消息報頭
cache 部分
If-Modified-Since:上次數據修改時間,和response 中的Last-Modified一起工作,在HTTP Response中獲取到Last-Modified信息緩存下來, 當用戶再次請求該資源時,將在HTTP Request 中加入If-Modified-Since信息(Last-Modified的值),如果服務器驗證資源的Last-Modified沒有改變(該資源沒有更新),將返回一個304狀態告訴客戶端使用本地緩存文件。否則將返回200狀態和新的資源和Last-Modified。

If-None-Match:一串字符串驗證令牌標識數據是否修改,server在數據修改後重新生成,和response 中的ETag一起工作, 工作原理同If-Modified-Since。

If-Modified-Since和If-None-Match都是用來判斷是否緩存過期,具體對比請看這篇文章

Cache-Control:HTTP1.1中實現的緩存控制參數,控制瀏覽器或者其他中繼緩存如何緩存某個響應以及緩存多長時間。各種取值參加這裏

Cache-Control和前兩種緩存機制的區別:Cache-Control是本地判斷是否過期無需請求服務器,前兩種緩存過期機制是服務器判斷,無過期則返回304狀態,過期則返回新數據。

client 部分
Accept:前端支持的數據返回格式,如Accept: text/html 代表前端支持html文檔,如果server無法返回text/html類型的數據,服務器應該返回一個406錯誤(non acceptable),Accept: / 代表前端可以處理所有類型。

Accept-Encoding:前端支持的編碼及壓縮方式(gzip,deflate),gzip 是無損壓縮,deflate 不壓縮,默認是壓縮方式。

User-Agent:前端的信息,包括版本系統等,如User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2SC MIUI/4.12.5)

Transport部分
Connection:是否保存連接,Connection: keep-alive請求完成後保持 tcp 連接,下次繼續使用,Connection: close請求完成後關閉 tcp 連接,默認是keep-alive打開狀態。

Host:指定被請求資源的Internet主機和端口號,必須傳輸的參數。

2.response 消息

這裏寫圖片描述
這裏寫圖片描述
cache 部分
Date:生成消息的時間。
Expires:前端緩存失效時間,可以用Cache-Control代替,Cache-Control優先級大於Expires。

Entity 部分
ETag:參考 request 中的If-None-Match。
Last-Modified:參考 request 中的If-Modified-Since。
Content-Type:返回對象和對應的字符集,如Content-Type: text/html; charset=utf-8。
Content-Length:傳輸數據的長度,壓縮數據後的長度,在讀取時需自己計算最終數據長度。
Content-Encoding:前端支持的編碼及壓縮方式(gzip,deflate),gzip 是無損壓縮,deflate 不壓縮,默認是壓縮方式。

(三)http 狀態分類

類別 範圍 含義
1XX 100-101 信息提示
2XX 200-206 請求成功
3XX 300-305 請求重定向
4XX 400-415 客戶端錯誤
5XX 500-505 服務端錯誤

常用狀態:
200 OK :客戶端請求成功
304 Not Modified:客戶端緩存資源是最新的,可以使用緩存
400 Bad Request :客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized :請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden:服務器收到請求,但是拒絕提供服務
404 Not Found:請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error:服務器發生不可預期的錯誤
502 Bad Gateway:網關障礙
503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章