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斷開



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM