http请求过程以及请求方法和状态码
1.HTTP協議
1.1定義
http(超文本傳輸協議)是用于客戶端瀏覽器和web服務器之間傳輸信息的協議,它規定了一系列約定,以便信息可以在瀏覽器和服務器之間有效的傳輸。規定了URL的格式、瀏覽器發送請求都要發送哪些內容、服務器響應要返回哪些信息等。
1.2 請求和響應過程
(1) 輸入網址
(2) 域名解析
2.1 瀏覽器自身緩存(chrome://net-internals/#dns)
2.2 搜索操作系統自身的DNS緩存(瀏覽器沒有找到緩存或者緩存已經失效,則跳轉到第2.3步)
2.3 讀取本地的host文件
2.4 瀏覽器發起一個DNS的系統調用(本地主控DNS服務器:寬帶運營商服務器查看本身緩存)
2.5 運營商服務器發起一個迭代DNS解析的請求
根域.com服務器查找比如http://www.jianshu.com域服務器
運營商服務器得到結果返回給操作系統內核
操作系統內核返回給瀏覽器并緩存
瀏覽器最終拿到了域名對應的ip地址
(3) 瀏覽器獲得域名對應的IP地址后,瀏覽器與服務器建立TCP、UDP連接.
(4) 瀏覽器給web服務器發送一個http請求
TCP/IP連接建立起來后,瀏覽器就可以向服務器發送HTTP請求了,比如,使用了HTTP的GET方法請求一個根域名里的一個域名等等。
(5) 服務器處理請求,給瀏覽器響應
(6) 瀏覽器根據返回結果進行處理或頁面渲染
整體的請求和響應過程如圖:
1.3請求報文
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成,下圖給出了請求報文的一般格式。
2.請求方法
2.1兩種 HTTP 請求方法:GET 和 POST
在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。
GET- 從指定的資源請求數據。
POST- 向指定的資源提交要被處理的數據
2.2比較 GET 與 POST
| GET | POST | |
|---|---|---|
| 后退按鈕/刷新 | 無害 | 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。 |
| 書簽 | 可收藏為書簽 | 不可收藏為書簽 |
| 緩存 | 能被緩存 | 不能緩存 |
| 編碼類型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。為二進制數據使用多重編碼。 |
| 歷史 | 參數保留在瀏覽器歷史中。 | 參數不會保存在瀏覽器歷史中。 |
| 對數據長度的限制 | 是的。(URL 的最大長度是 2048 個字符)。 | 無限制。 |
| 對數據類型的限制 | 只允許 ASCII 字符。 | 沒有限制。也允許二進制數據。 |
| 安全性 |
GET 的安全性較差,因為所發送的數據是 URL 的一部分。 在發送密碼或其他敏感信息時絕不要使用 GET ! |
POST 比 GET 更安全,因為參數不會被保存在瀏覽器歷史或 web 服務器日志中。 |
| 可見性 | 數據在 URL 中對所有人都是可見的。 | 數據不會顯示在 URL 中。 |
3.狀態碼
較為常見的幾個返回碼:200 400 406 500 502 504
| 分類 | 分類描述 |
| 1xx | 請求已被接受,需要繼續處理。 |
| 2xx | 請求已成功被服務器接收、理解并接受。 |
| 3xx | 重定向 |
| 4xx | 客戶端錯誤 |
| 5xx | 服務器錯誤 |
200:請求成功 301 :被請求的資源已永久重定向到其他URI。 302 :請求的資源現在臨時從不同的URI響應請求。 403 :對請求資源的訪問被服務器拒絕了。(權限,未授權IP等) 404 :服務器上沒有請求的資源。路徑錯誤等。 500 :服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。 503 :由于臨時的服務器維護或者過載,服務器當前無法處理請求。
4.session和cookes的區別
4.1、無狀態的HTTP協議:
HTTP協議是無狀態的協議。一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接。這就意味著服務器無法從連接上跟蹤會話。
4.2、會話跟蹤:
會話,指用戶登錄網站后的一系列動作,比如瀏覽商品添加到購物車并購買。會話跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。
Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份。
4.2.1、cookie
1、會話Cookie和持久Cookie
若不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬盤上而是保存在內存里。
若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在瀏覽器的不同進程間共享。這種稱為持久Cookie。
2、Cookie具有不可跨域名性
4.3. 總結
1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。 2、cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。 4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。 5、可以考慮將登陸信息等重要信息存放為session,其他信息如果需要保留,可以放在cookie中。
5.http1.0,http1.1,http2.0區別
5.1 http1.0和http1.1
1.緩存處理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。 2.帶寬優化及網絡連接的使用,HTTP1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,并且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便于充分利用帶寬和連接。 3.錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突;410(Gone)表示服務器上的某個資源被永久性的刪除。 4.Host頭處理,在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。 5.長連接,HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啟Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點。
5.2HTTP2.0和HTTP1.X相比的新特性
1.新的二進制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本協議的格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合。基于這種考慮HTTP2.0的協議解析決定采用二進制格式,實現方便且健壯 2.多路復用(MultiPlexing),即連接共享,即每一個request都是是用作連接共享機制的。一個request對應一個id,這樣一個連接上可以有多個request,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求里面 3.header壓縮,如上文中所言,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重復發送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重復header的傳輸,又減小了需要傳輸的大小 4.服務端推送(server push),同SPDY一樣,HTTP2.0也具有server push功能。
5.3HTTPS與HTTP的一些區別
http端口:80 https端口:443
https是對http協議的升級,增加了數據加密,通過SSL/TLS加密。
HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費。
HTTP協議運行在TCP之上,所有傳輸的內容都是明文,HTTPS運行在SSL/TLS之上,SSL/TLS運行在TCP之上,所有傳輸的內容都經過加密的。
HTTP和HTTPS使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
HTTPS可以有效的防止運營商劫持,解決了防劫持的一個大問題。
總結
以上是生活随笔為你收集整理的http请求过程以及请求方法和状态码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Helm中Tiller镜像下载失败的解决
- 下一篇: (九)ROS安装rviz模拟器