web基礎之HTTP協議
阿新 • • 發佈:2021-08-07
web基礎之HTTP協議
web基礎之HTTP協議
HTTP協議介紹
什麼是HTTP
HTTP
全稱:Hyper Text Transfer Protocol
中文名:超文字傳輸協議
什麼是超文字傳輸協議
包含有超連結(Link)和各種多媒體元素標記(Markup)的文字。這些超文字檔案彼此連結,形成網狀(Web),因此又被稱為網頁(Web Page)。這些連結使用URL表示。最常見的超文字格式是超文字標記語言HTM
html檔案->包含各種各樣的元素(URL連結)->形成WebPage簡稱web頁面
什麼是URL
統一資源定位符,用來唯一標識全球資訊網中的某一個文件
URL
由協議、主機和埠(預設為80)以及檔名三部分構成
URI
在URL
中的檔案部分,被稱為URI
http:// www.driverzeng.com: 80 /news/index.html
http協議 主機 埠 檔案
HTTP的工作原理
訪問:http://zuoye.driverzeng.com:8888/pic/1_oldboy_lnmp.jpg域名經過哪些流程
1.瀏覽器去請求DNS伺服器
- 1)請求local DNS(本地DNS),zuoye.driverzeng.com繫結的IP
- 2)請求223.5.5.5 ,13個根域 迭代查詢:先找.com 然後找driverzeng.com 最後找到zuoye.driverzeng.com 解析成192.168.3.250IP,把IP返回給瀏覽器
.com :
.org:開源域名
.net :網際網路
.int :
.edu:教育域名
.gov:政府域名
.mil:
2.瀏覽器與192.168.3.250伺服器的8888埠建立TCP連線
3.瀏覽器傳送連線伺服器的請求(三次握手):
- 1)瀏覽器向192.168.3.250伺服器傳送SYN
- 2)192.168.3.250伺服器回覆ACK給瀏覽器,同時傳送SYN給瀏覽器
- 3)瀏覽器向伺服器傳送ACK確認建立連線
4.開始資料交流,瀏覽器使用GET方式請求URI(/pic/1_oldboy_lnmp.jpg)
5.伺服器在站點目錄下/pic目錄裡面找到圖片1_oldboy_lnmp.jpg返回給瀏覽器
6.瀏覽器向伺服器斷開連線(四次揮手)
- 1)瀏覽器向伺服器傳送fin
- 2)伺服器接收fin並返回ACK
- 3)伺服器向瀏覽器傳送fin(確定資料是否傳輸完成)
- 4)瀏覽器向伺服器傳送ACK
- 5)瀏覽器進入tmie_waitz狀態
7.瀏覽器顯示URL中的圖片
HTTP 資料包分析
GET中的資訊:請求頭資訊
GET /favicon.ico HTTP/1.1
Host: www.qqyewu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/86.0.4240.198 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
GET和HTTP之間有個空行:請求空行
HTTP中的資訊:響應資訊
HTTP/1.1 200 OK
Content-Type: text/html
Content-Encoding: gzip
Last-Modified: Fri, 15 Nov 2013 21:51:25 GMT
Accept-Ranges: bytes
ETag: "80ac72d44ce2ce1:0"
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 13 Jul 2021 03:02:41 GMT
Content-Length: 1838
HTTP
與faa
之間也有個空行被稱為:響應空行
faa
部分被稱為:主體響應主體
頁面內容
開發者工具Network
Elements:當前頁面資訊
Console:前端開發使用:修改程式碼,做除錯
Sources:前端開發除錯
Network:
Perfomance:前端開發手機除錯
- General:基本資訊
# 請求的URL
Request URL: http://zuoye.driverzeng.com:8888/
# 請求方法是 GET
Request Method: GET
# 狀態碼:200
Status Code: 200 OK
# 遠端的地址
Remote Address: 192.168.3.250:8888
# referrer的策略
Referrer Policy: strict-origin-when-cross-origin
- Response Headers:響應頭
# 響應大小Accept-Ranges: bytes# 長連線(可持續傳送請求)Connection: Keep-Alive# 響應的內容長度Content-Length: 2633# 響應內容的型別;字符集Content-Type: text/html; charset=UTF-8# 日期Date: Tue, 13 Jul 2021 03:19:44 GMT# 長連線的超時時間,最大範圍Keep-Alive: timeout=5, max=100# 程式碼返回:記錄上一次的修改時間Last-Modified: Fri, 04 May 2018 08:13:44 GMT# 該網頁部署在伺服器的系統版本,以及服務版本Server: Apache/2.4.6 (CentOS) PHP/5.4.16
- Request Headers:請求頭
# 允許服務端給瀏覽器傳遞哪些文字型別Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9# 壓縮Accept-Encoding: gzip, deflate# 允許的語言Accept-Language: zh-CN,zh;q=0.9# 沒有設定快取Cache-Control: no-cache# 客戶端的長連線Connection: keep-alive# 請求的主機(域名)Host: zuoye.driverzeng.com:8888# 請求引數(沒有快取)Pragma: no-cache# 谷歌瀏覽器自帶Upgrade-Insecure-Requests: 1# 客戶端的資訊User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1
Http的請求方法
方法(Method) | 含義 |
---|---|
GET | 請求讀取一個Web頁面(傳遞引數,在瀏覽器裡可以看見) |
POST | 請求讀取一個Web頁面(傳遞引數看不見) |
DELETE | 刪除Web頁面 |
CONNECT | 用於代理伺服器 |
HEAD | 請求讀取一個Web頁面的頭部 |
PUT | 一般用於上傳 |
TRACE | 用於測試,要求伺服器送回收到的請求 |
OPTION | 查詢特定選項 |
Http的響應方法
響應報文中的狀態
狀態碼(status-code)是響應報文狀態行中包含的一個3位數字,指明特定的請求是否被滿足,如果沒有滿足,原因是什麼。
狀態碼分為以下五類
狀態碼 | 含義 |
---|---|
200 | 成功 |
301 | 永久重定向(跳轉) |
302 | 臨時重定向(跳轉) |
304 | 本地快取 |
307 | 內部重定向(跳轉) |
400 | 客戶端錯誤 |
401 | 認證失敗 |
403 | 找不到主頁,許可權不足 |
404 | 找不到頁面 |
500 | 內部錯誤 |
502 | 找不到後端主機 |
503 | 伺服器過載 |
504 | 後端主機超時 |
Http請求頭資訊
重要資訊
User-Agent
User-Agent:瀏覽器標識(作業系統標識;加密等級標識;瀏覽器語言)渲染引擎標識 版本資訊(客戶端資訊 )
Server
Server:響應頭包含處理請求的原始伺服器的軟體資訊
Referer
Referer:瀏覽器向 WEB 伺服器表明自己是從哪個 網頁/URL 獲得/點選 當前請求中的網址/URL。
HTTP重定向
Location:WEB 伺服器告訴瀏覽器,試圖訪問的物件已經被移到別的位置了,到該頭部指定的位置去取
Htttp訪問流程圖
Http協議原理總結
1.用輸入域名 - > 瀏覽器跳轉 - > 瀏覽器快取 - > Hosts檔案 - > DNS解析(遞迴查詢|迭代查詢) 客戶端向服務端發起查詢 - > 遞迴查詢 服務端向服務端發起查詢 - > 迭代查詢2.由瀏覽器向伺服器發起TCP連線(三次握手) 客戶端 -->請求包連線 -syn=1 seq=x 服務端 服務端 -->響應客戶端syn=1 ack=x+1 seq=y 客戶端 客戶端 -->建立連線 ack=y+1 seq=x+1 服務端3.客戶端發起http請求: 1)請求的方法是什麼: GET獲取 2)請求的Host主機是: blog.driverzeng.com 3)請求的資源是什麼: /index.html 4)請求的端埠是什麼: 預設http是80 https是443 5)請求攜帶的引數是什麼: 屬性(請求型別、壓縮、認證、瀏覽器資訊、等等) 6)請求最後的空行4.服務端響應的內容是 1)服務端響應使用WEB服務軟體 2)服務端響應請求檔案型別 3)服務端響應請求的檔案是否進行壓縮 4)服務端響應請求的主機是否進行長連線5.客戶端向服務端發起TCP斷開(四次揮手) 客戶端 --> 斷開請求 fin=1 seq=x --> 服務端 服務端 --> 響應斷開 fin=1 ack=x+1 seq=y --> 客戶端 服務端 --> 斷開連線 fin=1 ack=x+1 seq=z --> 客戶端 客戶端 --> 確認斷開 fin=1 ack=x+1 seq=sj --> 服務端
使用者訪問網站叢集架構流程
1.客戶端發起http請求,請求會先抵達前端的防火牆2.防火牆識別使用者身份,正常的請求通過內部交換機通過tcp連線後端的負載均衡,傳遞使用者的http請求3.負載接收到請求,會根據請求的內容進行下發任務,通過tcp連線後端的web,轉發發使用者的http請求4.web接收到使用者的http請求後,會根據使用者請求的內容進行解析,解析分為如下: 靜態請求:web直接返回給負載均衡->防火牆->使用者 動態請求:web向後端的動態程式建立TCP連線,將使用者的動態http請求傳遞至動態程式->由動態程式進行解析5.動態程式在解析的過程中,如果碰到查詢資料庫請求,則優先與快取建立tcp連線,併發起資料查詢操作。6.如果快取沒有對應的資料,動態程式再次向資料庫建立tcp連線,併發起查詢操作。7.最後資料由, 資料庫->動態程式->快取->web服務->負載均衡->防火牆->使用者。
Http相關術語
LAMP:linux Apache Mysql PhpLNMP:linux Nginx Mysql PhpLAMT:linux Apache Mysql TomcatLNMT:linux Nginx Mysql TomcatPV:頁面獨立的瀏覽量UV:獨立裝置IP:獨立ip假設公司有一座大廈,大廈有100人,每個人有一臺電腦和一部手機,上網都是通過nat轉換出口,每個人點選網站2次, 請問對應的pv,uv,ip分別是多少?PV: 100*2*2 = 400UV: 1002*2 = 200IP: 1
SOA鬆耦合架構
面向服務的架構(SOA)是一個元件模型,它將應用程式的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的介面和契約聯絡起來。介面是採用中立的方式進行定義的,它應該獨立於實現服務的硬體平臺、作業系統和程式語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行互動。