http協議工作原理及工作流程
阿新 • • 發佈:2020-07-12
什麼是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斷開