http協議
http協議介紹
# 什么叫做http
HTTP 全稱:Hyper Text Transfer Protocol 中文名:超文本傳輸協議
# http之 [超文本傳輸協議]
是一種按照URL指示,將超文本文檔從一台主機(Web服務器)傳輸到另一台主機(瀏覽器)的應用層協議,以實現超鏈接的功能。
怎講?可以這么理解:通過一個超鏈接,打開一個文本,當我們打開瀏覽器訪問百度:https://www.baidu.com,瀏覽器在幫你,去百度的服務器上下載一個文本(index.html)
# 什么是URL
統一資源定位符(唯一標識)
# URL組成部分
http://www.biadu.com:90/epel/1.txt
協議: http://
主機:端口 www.biadu.com:90
文件名和路徑 服務器站點目錄下的,目錄和文件
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 --> 服務端
- 原理圖
http請求方法
方法(Method) | 含義 |
---|---|
GET | 請求讀取一個Web頁面(下載一個頁面) |
POST | 附加一個命名資(如Web頁面)(上傳) |
DELETE | 刪除Web頁面 |
CONNECT | 用於代理服務器 |
HEAD | 請求讀取一個Web頁面的頭部 |
PUT | 請求存儲一個Web頁面 |
TRACE | 用於測試,要求服務器送回收到的請求 |
OPTION | 查詢特定選項 |
http狀態碼
- 1xx(臨時響應)表示臨時響應並需要請求者繼續執行操作的狀態代碼。
- 2xx和3xx都是網頁可以正常訪問
- 4xx:Nginx的報錯(出錯,出在nginx上)去檢查nginx服務,或者服務器權限等...
- 5xx:后端報錯(nginx后面連接的服務報錯:mysql、php、tomcat、redis.......,如果不是前面的原因:你們的代碼有問題,滾回去重寫)
詳細狀態碼請參考網頁TP
狀態碼 | 含義 |
---|---|
200 | 成功 |
301 | 永久重定向(跳轉) |
302 | 臨時重定向(跳轉) |
304 | 本地緩存(瀏覽器的緩存) |
307 | 內部重定向(跳轉) |
400 | 客戶端錯誤 |
401 | 認證失敗 |
403 | 找不到主頁,權限不足 |
404 | 找不到頁面 |
405 | 請求方法不被允許 |
500 | 內部錯誤(MySQL關閉等...) |
502 | bad gateway 壞了的網關(php tomcat 等服務關閉) |
503 | 服務端請求限制 |
504 | 請求超時 |
http頭部信息
- Referer重點說明:瀏覽器向 WEB 服務器表明自己是從哪個 網頁/URL 獲得/點擊 當前請求中的網址/URL,如當前處於百度搜索界面訪問簡書,那簡書服務器得知的請求報文則包含一則地址為www.baidu.com的Referer信息
http相關術語
PV
# pv
- 指一個網站的請求量,頁面獨立瀏覽量,如一個用戶多次對頁面進行訪問,PV都會將其記錄
# uv
- 獨立設備,一台手機多次訪問一個頁面只會算做一次訪問,這里按照設備作為訪問量
# ip
- 獨立的ip,如300人使用一個ip地址上網,對於網頁來說,只有一個用戶在進行訪問
# 案例:
假設公司有一座大廈,大廈有100人,每個人有一台電腦和一部手機,上網都是通過nat轉換出口,每個人點擊網站2次, 請問對應的pv,uv,ip分別是多少?每次訪問的請求數為一次
PV : 頁面獨立瀏覽量
UV : 獨立設備
IP : 獨立IP
那么上面的題:
PV: 100*2*2 = 400
UV: 1002*2 = 200
IP: 1
- 日PV千萬量級並不大,一般公司日UV可達到五六十萬左右,對於PV的統計,可對訪問日志文件進行統計,查看行數即可,因為一次的請求即為一行內容。對PV的統計一般有運維來進行,而uv的統計則需要開發統計,因需要對ip
松耦合架構
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立於實現服務的硬件平台、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。
簡單說明:比如京東,就是將多個網站組合,拆分模塊,瀏覽器中進行訪問一般都是jindong.com 但登錄或者購買界面又是其他網站。
#一個電商公司,他的網站頁面功能會有很多
注冊
登錄
首頁
詳情頁
購物車
價格標簽
留言
客服
支付中心
物流
倉儲信息
訂單相信
圖片
網站分析
網站數據包分析
網站數據包詳解
# 基本信息
請求網址:https://www.driverzeng.com/
請求方法:GET
遠程地址:39.104.203.184:443
狀態碼:
200
版本:HTTP/1.1
Request URL: http://www.biadu.com/
Request Method: GET
Status Code: 200 OK
Remote Address: 10.0.0.7:80
Referrer Policy: no-referrer-when-downgrade
# 請求頭部
## 請求的資源類型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/\*=0.8,application/signed-exchange;v=b3
## 資源類型壓縮
Accept-Encoding: gzip, deflate
## 資源類型的語言
Accept-Language: zh-CN,zh;q=0.9
## 緩存控制:服務端沒有開啟緩存
Cache-Control: no-cache
## 長連接
Connection: keep-alive
## 訪問的主機:www.biadu.com
Host: www.biadu.com
## 項目緩存:沒有開啟
Pragma: no-cache
## 客戶端優先加密
Upgrade-Insecure-Requests: 1
## 用戶訪問網站的客戶端工具
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
# 響應頭部
Connection: keep-alive # 建立長連接
Content-Type: text/html;charset=utf-8 # 解析方式和字符集
Date: Wed, 13 May 2020 02:29:35 GMT # 日期
server:Nginx/1.14.1 # 該網站服務器,使用的軟件和版本號
status: 200 # 狀態碼
狀態碼分析