Web基礎 HTTP協議
HTTP協議介紹
HTTP 全稱: Hyper Text Transfer Protocol 中文名:超文本傳輸協議
包含有超連接(Link)和各類多媒體元素標記(Markup)的文本。這些超文本文件彼此連接,造成網狀(Web),所以又被
稱爲網頁(Web Page)。這些連接使用URL表示。最多見的超文本格式是超文本標記語言HTML。
html文件->包含各類各樣的元素(URL連接)->造成WebPage簡稱web頁面
什麼是URL
URL 即統一資源定位符(Uniform Resource Locator),用來惟一地標識萬維網中的某一個文檔。
URL 由協議、主機和端口(默認爲80)以及文件名三部分構成
URI 在 URL 中的文件部分,被稱爲 URI
http:// zuoye.driverzeng.com:8888 /pic/1_oldboy_lnmp.jpg
#http協議 主機 端口 文件
HTTP的工做原理
訪問:http://zuoye.driverzeng.com:8888/pic/1_oldboy_lnmp.jpghtml
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.250
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 方式請求 /pic/1_oldboy_lnmp.jpg
5.服務器在站點目錄下/pic目裏面找到 1_oldboy_lnmp.jpg 返回給瀏覽器
6.瀏覽器向服務器斷開鏈接(四次揮手)
1)瀏覽器向服務器發送fin
2)服務器接收fin並返回ACK
3)服務器向瀏覽器發送fin(肯定數據是否傳輸完成)
4)瀏覽器向服務器發送ACK
5)瀏覽器進入time_wait狀態
7.瀏覽器顯示URL中的圖片
HTTP數據包分析
請求頭
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/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
響應信息下面的空行:響應空行
響應主體
頁面內容
開發者工具Network
## 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
# referer的策略
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 |
請求存儲一個Web頁面 |
TRACE |
用於測試,要求服務器送回收到的請求 |
OPTION |
查詢特定選項 |
HTTP的響應方法
HTTP的響應方法
狀態碼 |
含義 |
200 |
成功 |
301 |
永久重定向(跳轉) |
302 |
臨時重定向(跳轉) |
304 |
本地緩存 |
307 |
內部重定向(跳轉) |
400 |
客戶端錯誤 |
401 |
認證失敗 |
403 |
找不到主頁,權限不足 |
404 |
找不到頁面 |
500 |
內部錯誤 |
502 |
找不到後端主機 |
503 |
服務器過載 |
504 |
後端主機超時 |
server {
listen 80;
root /var/www/html;
server_name localhost;
location / {
autoindex on;
}
location /aaaa {
aasdasda;
}
}
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主機是: www.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 --> 服務端
HTTP相關術語
LAMP:Linux Apache Mysql PHP
LNMP:Linux Nginx Mysql PHP
LAMT:Linux Apache Mysql Tomcat
LNMT:Linux Nginx Mysql Tomcat
PV:頁面獨立的瀏覽量
UV:獨立設備
IP:獨立IP
SOA鬆耦合架構