Http協議介紹

HTTP 全稱:Hyper Text Transfer Protocol 中文名:超文本傳輸協議
什么是超文本?
包含有超鏈接(Link)和各種多媒體元素標記(Markup)的文本。這些超文本文件彼此鏈接,形成網狀(Web),因此又被稱為網頁(Web Page)。這些鏈接使用URL表示。最常見的超文本格式是超文本標記語言HTML。
html文件->包含各種各樣的元素(URL鏈接)->形成WebPage簡稱web頁面
URL`即統一資源定位符(Uniform Resource Locator),用來唯一地標識萬維網中的某一個文檔。
URL由協議、主機和端口(默認為80)以及文件名三部分構成:

什么是超文本傳輸協議
是一種按照URL指示,將超文本文檔從一台主機(Web服務器)傳輸到另一台主機(瀏覽器)的應用層協議,以實現超鏈接的功能。
Http工作原理

2.其次,瀏覽器會向DNS服務器請求解析,該URL中的域名www.baidu.com,解析出百度服務器所在的IP地址
3.DNS服務器,會將解析出來的IP地址110.111.112.113並返回給瀏覽器。
4.瀏覽器接收到DNS返回的IP地址,立即與該IP所在的服務器建立TCP連接(80端口)。
5.瀏覽器請求文檔,也就是咱們常說的html頁面,GET /index.html,並發出HTTP請求報文。
6.服務器給出響應,將請求的index.html文檔返回給瀏覽器,也就是響應HTTP請求的報文。
7.TCP連接響應完之后,釋放TCP連接。
8.最后就能顯示出,你請求的這個頁面了
《單身狗版HTTP工作原理》
單身狗劉大哥:瀏覽器飾
中介大哥:DNS飾
小姐姐照片:URL飾
小姐姐:服務器飾
1.首先作為單身狗的瀏覽器,在拿到一個URL(小姐姐照片)之后,先分析(意淫)...身材,臉蛋emmmmm...不可描述。
2.然后找到DNS(中介大哥),哥,你把這個小姐姐的,電話,微信,QQ...發給我唄
3.DNS(中介大哥),開始找,這個小姐姐的信息...找到手機號110.111.112.113返回給這個姓劉的單身狗(瀏覽器)
4.劉大哥拿到手機號之后,欣喜若狂,於是就開始打電話(建立TCP連接)給小姐姐。
5.劉大哥,打電話,給小姐姐,發出邀約請求(HTTP請求報文,GET /index.html)我們見一面吧,電影院,公園,酒店...都可以。
6.小姐姐,回應劉大哥的請求,(HTTP響應報文)現在是大夏天的公園熱,電影院又黑,我怕黑...那就酒店見吧,你開好房間等我。
7.掛掉電話,(釋放TCP連接)
8.劉大哥和小姐姐,在酒店見面,關好門,拉上窗簾,掀開被子,在床上,進入被窩,劉大哥掏出.........自己的手表,你看我的手表是夜光的(顯示html頁面)...活該單身
訪問網站分析
1.url
一個URL有可能會很長,以 & 為分隔符每一個&后面都是一個參數,如下所示:
https://www.baidu.com/s?ie=utf-8
&f=8
&rsv_bp=1
&rsv_idx=1
&tn=baidu
&wd=%E6%9B%BE%E8%80%81%E6%B9%BF
&rsv_pq=c177c4df0026ba3e
&rsv_t=e001VxO8FQ8I6s1o1i0km8IYEX2%2F7PwwkwTB6FC%2FXU9Mmwz24Z4i%2BnYoP0I&rqlang=cn&rsv_enter=1
&rsv_dl=tb
&rsv_sug2=0
&inputT=1729
&rsv_sug4=1728
2.請求DNS
PC(電腦)向DNS服務器110.111.112.113發出DNS QUERY請求,請www.driverzeng.com的A記錄。

3.DNS回復
DNS服務器,回復 DNS response,解析出www.driverzeng.com域名對應的三條 A 記錄
45.253.17.216
45.253.17.213
45.253.17.211


4.建立TCP 連接
PC向解析出的www.driverzeng.com服務器地址發起tcp三次握手

5.發起HTTP請求報文
PC向www.driverzeng.com服務器發出GET請求,請求主頁面

6.服務器回應
www.driverzeng.com服務器回應HTTP/1.1 302 這里302是我做了跳轉所以顯示的是302,返回主頁數據包,正常來說可以看到圖中,下面的有些網站返回的是 HTTP/1.1 200 OK 200是正確訪問的狀態碼

下圖中
GET那一部分內容被稱為:請求頭信息
GET和HTTP之間有一個空行被稱為:請求空行
HTTP中的信息被稱為:回應信息
HTTP與faa之間也有個空行被稱為:響應空行
faa部分被稱為:主體

7.完成響應
最后完成了數據的交互過程,TCP建立的連接經過三次握手之后,還要經過四次揮手,斷開連接
下圖所示:為什么有的時候狀態碼是200 有的時候是304?



8.頁面請求信息更新

General:基本信息
Response Headers:響應的頭部信息
Request Headers:請求的頭部信息
基本信息
#請求的url
Request URL: https://www.driverzeng.com/
#請求方式
Request Method: GET
#狀態碼
Status Code: 200
#遠程主機IP
Remote Address: 45.253.17.213:443
#控制請求頭內容
Referrer Policy: no-referrer-when-downgrade
請求頭信息

#請求的域名
:authority: www.driverzeng.com
#請求的方式
:method: GET
#請求的路徑
:path: /
#請求的協議:https
:scheme: https
#請求資源類型
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: no-cache
#保持連接:長連接
Connetection:keep-alive
HTTP/1.1版本 #長連接,一次TCP的連接可以發起多次http請求
HTTP/1.0版本 #短連接,一次TCP的連接只能發起一次http請求
還有HTTP/2.0和HTTP/3.0
#請求的域名
Host:www.driverzeng.com
#登錄信息
cookie: PHPSESSID=afb7d767864ce6a652caa67dde33fcfc; wordpress_test_cookie=WP+Cookie+check; wordpress_logged_in_8cb66d45a3693d7c9673d2f1eaf63f66=admin%7C1565534946%7C0cvYan2unubeCmkeb4dHfIueS0DrnA4cW8plJj9700T%7C37bb38d7b5c62837d6d82dd12eda70830752a1a37cf976d94d4ee560c75f766f; wp-settings-1=libraryContent%3Dbrowse%26editor%3Dtinymce%26hidetb%3D0%26post_dfw%3Doff%26align%3Dcenter%26imgsize%3Dlarge%26mfold%3Do; wp-settings-time-1=1564325346; player_volume=0.0896551724137931; player=no; wp-postpass_8cb66d45a3693d7c9673d2f1eaf63f66=%24P%24Bpclv.Wj97LNy8oqHuxiMGDrNAjbwc1
#參數:沒有緩存
pragma: no-cache
#谷歌自帶的(不屬於請求頭的內容)
upgrade-insecure-requests: 1
#客戶端(用戶設備)
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
響應頭部信息
#大小
Accept-Range:bytes
#阿里雲存儲保存時間
ali-swift-global-savetime: 1564813833
#緩存控制
cache-control: no-cache, must-revalidate, max-age=0
#壓縮
content-encoding: gzip
#內容長度
content-length: 9410
#返回內容類型及字符集
content-type: text/html; charset=UTF-8
#返回服務器時間
date: Sat, 03 Aug 2018 06:30:33 GMT
#加密id
eagleid: 2dfd119815648138332064260e
#失效時間
expires: Wed, 11 Jan 1984 05:00:00 GMT
#軟鏈接
link: <https://www.driverzeng.com/wp-json/>; rel="https://api.w.org/"
#參數:沒有緩存
pragma: no-cache
#使用的web軟件
server: Tengine
#狀態碼
status: 200
#指定特定站點允許訪問
timing-allow-origin: *
#渲染
vary: Accept-Encoding
#經過各級緩存
via: cache14.l2cm12[99,200-0,M], cache1.l2cm12[101,0], cache13.cn1300[122,200-0,M], cache4.cn1300[123,0]
------------- 以下都是CDN廠商帶的 ----------------
#CDN緩存是否命中
x-cache: MISS TCP_MISS dirn:-2:-2
#緩存版本號
x-powered-by: PHP/7.1.21
#緩存時間
x-swift-cachetime: 0
#保存時間
x-swift-savetime: Sat, 03 Aug 2019 06:30:33 GMT
Http請求方法
請求頭信息
在HTTP請求報文中的方法(Method),是對所請求對象所進行的操作,也就是一些命令。請求報文中的操作有:
| 方法(Method) | 含義 |
|---|---|
| GET | 請求讀取一個Web頁面 |
| POST | 附加一個命名資(如Web頁面) |
| DELETE | 刪除Web頁面 |
| CONNECT | 用於代理服務器 |
| HEAD | 請求讀取一個Web頁面的頭部 |
| PUT | 請求存儲一個Web頁面 |
| TRACE | 用於測試,要求服務器送回收到的請求 |
| OPTION | 查詢特定選項 |
POST請求向指定的資源提交要被處理的數據


Http響應方法
響應報文中的狀態碼
狀態碼(status-code)是響應報文狀態行中包含的一個3位數字,指明特定的請求是否被滿足,如果沒有滿足,原因是什么。狀態碼分為以下五類:

| 狀態碼 | 含義 |
|---|---|
| 200 | 成功 |
| 301 | 永久重定向(跳轉) |
| 302 | 臨時重定向(跳轉) |
| 304 | 本地緩存 |
| 307 | 內部重定向(跳轉) |
| 400 | 客戶端錯誤 |
| 401 | 認證失敗 |
| 403 | 找不到主頁,權限不足 |
| 404 | 找不到頁面 |
| 500 | 內部錯誤 |
| 502 | 找不到后端主機 |
| 503 | 服務器過載 |
| 504 | 后端主機超時 |
4xx:基本都是nginx 錯誤。
5xx :內部程序錯誤,如數據庫,php,tomcat...
頭部信息

User-Agent
User-Agent:瀏覽器標識(操作系統標識;加密等級標識;瀏覽器語言)渲染引擎標識 版本信息

Server
Server:響應頭包含處理請求的原始服務器的軟件信息

Referer
Referer:瀏覽器向 WEB 服務器表明自己是從哪個 網頁/URL 獲得/點擊 當前請求中的網址/URL。


HTTP重定向
Location:WEB 服務器告訴瀏覽器,試圖訪問的對象已經被移到別的位置了,到該頭部指定的位置去取。

HTTP訪問流程圖

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 --> 服務端
用戶訪問網站集群架構流程
1.客戶端發起http請求,請求會先抵達前端的防火牆
2.防火牆識別用戶身份,正常的請求通過內部交換機通過tcp連接后端的負載均衡,傳遞用戶的http請求
3.負載接收到請求,會根據請求的內容進行下發任務,通過tcp連接后端的web,轉發發用戶的http請求
4.web接收到用戶的http請求后,會根據用戶請求的內容進行解析,解析分為如下:
靜態請求:web直接返回給負載均衡->防火牆->用戶
動態請求:web向后端的動態程序建立TCP連接,將用戶的動態http請求傳遞至動態程序->由動態程序進行解析
5.動態程序在解析的過程中,如果碰到查詢數據庫請求,則優先與緩存建立tcp連接,並發起數據查詢操作。
6.如果緩存沒有對應的數據,動態程序再次向數據庫建立tcp連接,並發起查詢操作。
7.最后數據由, 數據庫->動態程序->緩存->web服務->負載均衡->防火牆->用戶。

http相關術語
PV、UV、IP
假設公司有一座大廈,大廈有100人,每個人有一台電腦和一部手機,上網都是通過nat轉換出口,每個人點擊網站2次, 請問對應的pv,uv,ip分別是多少?
- PV : 頁面獨立瀏覽量
- UV : 獨立設備
- IP : 獨立IP
那么上面的題:
PV: 10022 = 400
UV: 1002*2 = 200
IP: 1
日PV千萬量級並不大
SOA松耦合架構
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立於實現服務的硬件平台、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。

#一個電商公司,他的網站頁面功能會有很多
注冊
登錄
首頁
詳情頁
購物車
價格標簽
留言
客服
支付中心
物流
倉儲信息
訂單相信
圖片
