1. 程式人生 > 實用技巧 >http協議工作原理及工作流程

http協議工作原理及工作流程



什麼是url ?

url = 協議 + 域名 + 資源路徑 比如: https://www.baidu.com/index.html

  • http : 超文字傳輸協議
  • https: 安全套接字協議

HTTP的工作原理

訪問https://mirrors.aliyun.com/centos-vault/readme.txt的時候發生了什麼?
1、瀏覽器解析url,對url進行解析域名對應的IP
2、將域名交給DNS伺服器,詢問dns伺服器該域名對應IP是什麼
3、DNS返回IP給瀏覽器
4、瀏覽器與DNS返回的IP的80埠進行tcp連線
5、請求站點目錄下的centos-vault/readme.txt
6、伺服器響應返回一個狀態碼,瀏覽器就斷開tcp連線
7、如果狀態碼是2xx或者是3xx,就可以載入頁面

請求分析

頁面資訊


# 基本資訊
Request URL: https://www.baidu.com/   # 請求的主機
Request Method: GET					# http請求方法
Status Code: 200 OK					# 返回的狀態碼
Remote Address: 14.215.177.39:443	# 目標主機的ip和埠
Referrer Policy: no-referrer-when-downgrade	

# 響應頭部
Bdpagetype: 1
Bdqid: 0xbb77515a0073bd0f
Cache-Control: private
Connection: keep-alive		# 建立長連線
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8		# 解析方式和字符集
Date: Wed, 13 May 2020 02:23:21 GMT			# 日期
Expires: Wed, 13 May 2020 02:22:25 GMT
Server: BWS/1.1							# web伺服器的名稱
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1589336601022180301813508355054317583631
Transfer-Encoding: chunked
X-Ua-Compatible: IE=Edge,chrome=1

# 請求頭部
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3     			# 請求的資源型別
Accept-Encoding: gzip, deflate, br		# 資源型別壓縮
Accept-Language: zh-CN,zh;q=0.9			# 資源型別語言
Cache-Control: max-age=0				# 快取控制,服務端的快取
Connection: keep-alive					# 長連線
Cookie: BIDUPSID=C660B517FF8D703361BEF27A8E0B4A86; PSTM=1589100937; BAIDUID=C660B517FF8D7033A98FCF75B8449AC5:FG=1; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; delPer=0; BD_CK_SAM=1; PSINO=6; H_PS_645EC=94f7XUqf2UNuFyrpWJocENb5EtAFjG61sQS1yaq%2B9tPHYmQPOTzqO5NtnNU; COOKIE_SESSION=83388_0_8_5_1_8_1_1_8_2_0_0_1589201145_0_0_0_1589201330_0_1589335040%7C9%230_0_1589335040%7C1; __yjsv5_shitong=1.0_7_9449884d52ca169ba37dc788ecf839422ab2_300_1589336389184_106.84.9.86_0cf955f8; yjs_js_security_passport=057098de95624ead2bac92e4c7abd3e8b8e85870_1589336389_js; BD_HOME=1
Host: www.baidu.com				# 訪問的主機
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1	# 客戶端優先加密
# 訪問時瀏覽器和作業系統標識
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36

HTTP請求方法


方法(Method) 含義
GET 請求讀取一個Web頁面
POST 附加一個命名資(如Web頁面)
DELETE 刪除Web頁面
CONNECT 用於代理伺服器
HEAD 請求讀取一個Web頁面的頭部
PUT 請求儲存一個Web頁面
TRACE 用於測試,要求伺服器送回收到的請求
OPTION 查詢特定選項

返回狀態碼


狀態碼 含義
200 成功
301 永久重定向(跳轉)在本地快取不清除的情況下,可以一直訪問,即使伺服器斷開。
302 臨時重定向(跳轉)伺服器斷開就看不了網頁,http會自動跳轉為https。
304 本地快取,先開啟一次網頁,再重新整理的時候,會使用本地快取
307 內部重定向(跳轉)
400 客戶端錯誤
401 認證失敗
403 找不到主頁,許可權不足;站點目錄沒有內容,或者許可權不足的情況
404 找不到頁面
405 請求方法不被允許
500 內部錯誤,比如:資料庫被停掉
502 找不到後端主機 bad gateway
503 伺服器過載,服務端請求限制,被ddos攻擊的時候可以這樣返回。
504 後端主機超時

2xx和3xx可以正常訪問

4xx都是nginx的報錯

5xx後端報錯(nginx後面連線的服務報錯:mysql、php、tomcat、redis)

正常訪問網頁的時候基本資訊裡面返回的狀態碼:

使用了本地快取載入網頁

訪問一個不存在的資源的時候

沒有預設站點的情況

個人主頁輸入使用者名稱和密碼訪問失敗的時候


referer


HTTP Referer是header的一部分,當瀏覽器向web伺服器傳送請求的時候,一般會帶上Referer,告訴伺服器該網頁是從哪個頁面連結過來的,伺服器因此可以獲得一些資訊用於處理。


HTTP請求過程


1.用輸入域名 -> 瀏覽器跳轉 -> 瀏覽器快取 -> Hosts檔案 -> DNS解析

2.由瀏覽器向伺服器發起TCP連線。

3.客戶端發起http請求:
    1)請求的方法是什麼:     GET獲取
    2)請求的Host主機是:     www.baidu.com
    3)請求的資源是什麼:     /index.html
    4)請求的端埠是什麼:    預設http是80 https是443
    5)請求攜帶的引數是什麼:   屬性(請求型別、壓縮、認證、瀏覽器資訊、等等)
    6)請求最後的空行
4.服務端響應的內容是
    1)服務端響應使用WEB服務軟體
    2)服務端響應請求檔案型別
    3)服務端響應請求的檔案是否進行壓縮
    4)服務端響應請求的主機是否進行長連線
5.客戶端向服務端發起TCP斷開