Http相關知識

在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,因此:html

  • HTML是一種用來定義網頁的文本,會HTML,就能夠編寫網頁;
  • HTTP是在網絡上傳輸HTML的協議,用於瀏覽器和服務器的通訊。

當咱們在地址欄輸入www.segmentfault.com時,瀏覽器將顯示思否的首頁。在這個過程當中,瀏覽器都幹了哪些事情呢?經過Network的記錄,咱們就能夠知道。在Network中,定位到第二條記錄,點擊,右側將顯示Request Headers,點擊右側的view sourceview parsed),咱們就能夠看到瀏覽器發給思否服務器的請求:apache

image.png

請求(request)【客戶端->服務端】**

  1. GET(請求的方式) /socket.io/?...(請求的目標資源) HTTP/1.1(請求採用的協議和版本號)
  2. Accept: /(客戶端能接收的資源類型)
  3. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8(客戶端接收的語言類型)
  4. Connection: keep-alive(維護客戶端和服務端的鏈接關係)
  5. Host: segmentfault.com:9443(鏈接的目標主機和端口號)
  6. Referer: https://segmentfault.com/ (告訴服務器我來自於哪裏)
  7. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36(客戶端版本號的名字)
  8. Accept-Encoding: gzip, deflate, br (客戶端能接收的壓縮數據的類型)
  9. If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(緩存時間)
  10. Cookie(客戶端暫存服務端的信息)
  11. Date: Tue, 11 Jul 2000 18:23:51 GMT(客戶端請求服務端的時間)

響應(response)【服務端->客戶端】

  • HTTP/1.1(響應採用的協議和版本號) 200(狀態碼) OK(描述信息)
  • Location: http://www.baidu.com (服務端須要客戶端訪問的頁面路徑) 
  • Server:apache tomcat(服務端的Web服務端名)
  • Content-Encoding: gzip(服務端可以發送壓縮編碼類型) 
  • Content-Length: 80(服務端發送的壓縮數據的長度) 
  • Content-Language: zh-cn(服務端發送的語言類型) 
  • Content-Type: text/html; charset=GB2312(服務端發送的類型及採用的編碼方式,瀏覽器就是依靠Content-Type來判斷響應的內容)
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服務端對該資源最後修改的時間)
  • Refresh: 1;url=http://www.it315.org(服務端要...,刷新,而後訪問指定的頁面路徑)
  • Content-Disposition: attachment; filename=aaa.zip(服務端要求客戶端如下載文件的方式打開該文件)
  • Transfer-Encoding: chunked(分塊傳遞數據到客戶端)
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服務端發送到客戶端的暫存數據)
  • Expires: -1//3種(服務端禁止客戶端緩存頁面數據)
  • Cache-Control: no-cache(服務端禁止客戶端緩存頁面數據)  
  • Pragma: no-cache(服務端禁止客戶端緩存頁面數據)   
  • Connection: close(1.0)/(1.1)Keep-Alive(維護客戶端和服務端的鏈接關係)  
  • Date: Tue, 11 Jul 2000 18:23:51 GMT(服務端響應客戶端的時間)

當瀏覽器讀取到segmentfault首頁的HTML源碼後,它會解析HTML,顯示頁面,而後,根據HTML裏面的各類連接,再發送HTTP請求給思否服務器,拿到相應的圖片、視頻、Flash、JavaScript腳本、CSS等各類資源,最終顯示出一個完整的頁面。因此咱們在Network下面能看到不少額外的HTTP請求。segmentfault

總結一下HTTP請求的流程:

步驟1:瀏覽器首先向服務器發送HTTP請求,請求包括:瀏覽器

  • 方法:GET仍是POSTGET僅請求資源,POST會附帶用戶數據;
  • 路徑:/full/url/path
  • 域名:由Host頭指定:Host: segmentfault.com:9443
  • 以及其餘相關的Header;
  • 若是是POST,那麼請求還包括一個Body,包含用戶數據。

步驟2:服務器向瀏覽器返回HTTP響應,響應包括:緩存

  • 響應代碼:200表示成功,3xx表示重定向,4xx表示客戶端發送的請求有錯誤,5xx表示服務器端處理時發生了錯誤;
  • 響應類型:由Content-Type指定,例如:Content-Type: text/html;charset=utf-8表示響應類型是HTML文本,而且編碼是UTF-8Content-Type: image/jpeg表示響應類型是JPEG格式的圖片;
  • 以及其餘相關的Header;

一般服務器的HTTP響應會攜帶內容,也就是有一個Body,包含響應的內容,網頁的HTML源碼就在Body中。tomcat

步驟3:若是瀏覽器還須要繼續向服務器請求其餘資源,好比圖片,就再次發出HTTP請求,重複步驟一、2。服務器

Web採用的HTTP協議採用了很是簡單的請求-響應模式,從而大大簡化了開發。當咱們編寫一個頁面時,咱們只須要在HTTP響應中把HTML發送出去,不須要考慮如何附帶圖片、視頻等,瀏覽器若是須要請求圖片和視頻,它會發送另外一個HTTP請求,所以,一個HTTP請求只處理一個資源。網絡

HTTP協議同時具有極強的擴展性,雖然瀏覽器請求的http://www.segmentfault.com:9443的首頁,可是在HTML中能夠鏈入其餘服務器的資源,好比<img src="http://i1.s.cn/home/U8455P30DT20131008135420.png">,從而將請求壓力分散到各個服務器上,而且,一個站點能夠連接到其餘站點,無數個站點互相連接起來,就造成了World Wide Web,簡稱「三達不溜」(WWW)。socket

https://www.liaoxuefeng.com/wiki/1016959663602400/1017804782304672
https://blog.csdn.net/u014466635/article/details/81004127
【簡單比較 http https http2】簡單比較 http https http2
【應用層+傳輸層TCP/UDP】應用層+傳輸層TCP/UDPide

相關文章
相關標籤/搜索