目錄
- 引言
- 一、 Web 基礎
- 1. 域名和 DNS
- 1.1 域名的概念
- 1.2 域名的結構
- 1.3 域名的申請
- 2. Hosts 檔案
- 2.1 作用
- 2.2 修改 Hosts 檔案
- 2.3 網卡中配置
- 3. 網頁與 HTML
- 3.1 網頁概述
- 3.2 網頁相關概念
- 3.3 HTML 概述
- 3.4 Web 概述
- 3.5 靜態頁面與動態頁面
- 二、HTTP 協議
- 1. 概述
- 2. 三次握手,四次斷開
- 3. 無狀態協議
- 4. HTTP 版本
- 5. HTTP 方法
- 6. HTTP 狀態碼
- 總結
引言
隨著互聯網的飛速發展,企業資訊化應用大多已采用網頁的形式構建,掌握網頁的相關的知識和 HTTP 的請求流程,是掌味訓聯網技術的第一步,
一、 Web 基礎
1. 域名和 DNS
1.1 域名的概念
- 網路是基于 TCP/IP 協議進行通信和連接的,每一臺主機都有一個唯一的固定的 IP 地址,以區別于網路上成千上萬個用戶和計算機,
- 網路中的地址方案分為兩套:IP 地址系統和域名地址系統,兩套地址系統是一一對應的
- 由于 IP 地址是數字標識,使用時難以記憶和書寫,因此在IP地址的基礎上發展出一種符號化的地址方案,來代替數字型的IP地址
- 每個符號化的地址都與特定的 IP 地址對應,這樣網路上資源訪問起來就比較容易的多,這個與網路上的數字型 IP 地址相對應的字符型地址,就是域名,
1.2 域名的結構
域名的結構和型別可以參照之前的總結
1.3 域名的申請
- 域名注冊是 Internet 中用于解決地址對應問題的一種方法
- 遵循先申請先注冊原則
- 域名注冊步驟: 準備申請資料——》尋找域名注冊網站——》查詢域名——》正式申請——》申請成功
2. Hosts 檔案
Hosts 檔案是一個用于存盤計算機網路中節點資訊的檔案,可以將主機名映射到相應的 IP 地址,實作 DNS 的功能,可以由計算機的用戶進行修改控制,
2.1 作用
- 在網路上訪問網站,要先通過 DNS 服務器把要訪問的域名決議成 IP 地址后,計算機才能對這個網路域名進行訪問
- 由于 DNS 做域名決議和回傳 IP 需要時間,為了提高決議效率,可以通過在 Hosts 檔案中建立域名和 IP 的映射關系來達到目的,
- 在進行 DNS 請求前,系統會先檢查自己的 Hosts 檔案是否有這個網路域名映射關系;如果有,就呼叫這個 IP 地址映射,如果沒有,再向已知的 DNS 服務器提出域名決議,也就是說 Hosts 的請求級別比 DNS 高,
2.2 修改 Hosts 檔案
- /etc/hosts
#linux系統中負責快速決議的檔案,包含了ip與主機名的映射關系,在沒有DNS服務器的情況下,\
使用本地/etc/hosts完成決議/映射,實作快速訪問
[root@nginx /opt]#vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.134 www.gkd.com
- /etc/resolv.conf
#DNS客戶端組態檔,主要用于設定DNS服務器的iP和域名,還包含了主機域名的搜索順序等等,\
這個檔案是由域名決議器(resolver,一個根據主機名決議IP地址的庫)使用的組態檔,
[root@nginx /etc]#vim resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.8.2
2.3 網卡中配置
[root@nginx /etc]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=114.114.114.114
DNS2=8.8.8.8
#生效順序: hosts檔案 > 網卡組態檔 > /etc/resolv.conf
3. 網頁與 HTML
3.1 網頁概述
-
網頁是一個檔案,存放在世界上某個角落的某一部計算機中,而這部計算機必須是與互聯網相連的,網頁經由網址(URL)來識別與存放,是互聯網的一"頁",
-
網頁可以包括如下內容:
① 文本: 文本是網頁上最重要的資訊載體與交流工具,網頁中的主要資訊一般都以文本形式為主,
② 影像: 影像在網頁中具有提供資訊并展示直觀形象的作用,靜態影像: 在網頁中可能是圖片或矢量圖形,通常為GIF、JPEG或PNG或矢量格式,如SVG或Flash,影片影像: 通常為GIF和SVG,
③ Flash影片: 影片在網頁中的作用是有效地吸引訪問者更多的注意
④ 聲音: 聲音是多媒體和視頻網頁重要的組成部分,
⑤ 視頻: 視頻檔案的采用使網頁效果更加精彩且富有動感,
⑥ 表格:表格用來在網頁中控制頁面資訊的布局方式,
⑦ 導航欄: 導航欄在網頁中是一組超鏈接,其連接的目的端是網頁中重要的頁面,
⑧ 互動式表單: 表單在網頁中通常用來連接資料庫并接受用戶在瀏覽器端輸入的資料,利用資料庫為客戶端與服務器端提供更多的互動,
3.2 網頁相關概念
- 域名:瀏覽網頁時輸入的網址
- HTTP :用來傳輸網頁的通信協議,使用瀏覽器訪問網址時,在域名前面要加上 http:// ,表示使用 http 協議傳輸網頁
- URL:是一種萬維網尋址系統,表示網路上資源的位置路徑
- HTML:是撰寫網頁的超文本標記語言
- 超鏈接:將網站中不同網頁鏈接起來的功能
- 發布:將制作好的網頁上傳到服務器提供用戶訪問的程序
3.3 HTML 概述
- HTML 是超文本標記語言,是一種規范,也是一種標準,通過標記符來標記要顯示的網頁中的各個部分
- 網頁檔案本身是一種文本檔案,通過在文本檔案中添加標記符,可以告訴瀏覽器如何顯示其中的內容
- HTML 檔案可以使用任何能夠生成 txt 檔案的文本編輯器來編輯,生成超文本標記語言檔案,只需修改檔案名后綴為 “.html” 或 “.htm” 即可
3.4 Web 概述
-
web (world wide Web)即全球廣域網,也稱為萬維網,是一種分布式圖形資訊系統,建立在Internet上的一種網路服務
-
web1.0 與 web2.0
web1.0
以編輯為特征,網站提供給用戶的內容是編輯處理后的,然后用戶閱讀網站提供的內容這個程序是網站到用戶的單向行為(靜態頁面的概念)黃頁
web2.0
更注重用戶的互動作用,用戶既是網站內容的消費者(瀏覽者),也是網站內容的制造者
加強了網站與用戶之間的互動,網站內容基于用戶提供,網站的諸多功能也由用戶參與建設,實作了網站與用戶雙向的交流與參與 web2.0特征
用戶分享、以興趣為聚合點的社群、開放的平臺,活躍的用戶
3.5 靜態頁面與動態頁面
- 靜態頁面
是標準的HTAL檔案 ,擴展名是 .htm、 .html,例如文本、影像、聲音、Flash影片、客戶端腳本和Activex控制元件及Java小程式等
是網站建設的基礎,早期網站一般都由靜態網頁制作
沒有后臺資料庫、不含程式和不可互動的網頁
相對更新起來比較麻煩,適用于一般更新較少的展示型網站
- 靜態頁面特點
① 每個靜態網頁都有一個固定的URL,且URL以.htm、.html、.shtml等常見形式為后綴,而不含有"?"
② 網頁內容一經發布到網站服務器上,無論是否有用戶訪問,每個靜態網頁都是保存在網站服務器上的
③ 靜態網頁的內容相對穩定,容易被搜索引擎檢索
④ 靜態網頁沒有資料庫的支持,在網站制作和維護方面作業量較大,因此當網站資訊量很大時完全依靠靜態網頁制作方式比較困難
⑤ 靜態網頁的互動性較差,在功能方面有較大的限制
⑥ 頁面瀏覽速度迅速,程序無需連接資料庫,開啟頁面速度快于動態頁面
- 動態頁面
指跟靜態頁面相對的一種網頁編程技術
動態網頁URL的后綴不是 .html 、.htm 、.shtml 、.xml等靜態網頁的常見網頁制作格式,而是以 .aspx 、.asp 、 .jsp 、 .php 、.perl 、.cgi 等形式為后綴,并且在動態頁面網頁網址中有一個標志性的符號—— " ? "
常用的語言有PHP、JsP、Python、 Ruby等
- 動態頁面特點
① 互動性:網頁會根據用戶的要求和選擇而動態改變和回應,將瀏覽器作為客戶端界面,這將是今后的大勢所趨
② 自動更新:無須手動地更新HTML檔案,便會自動生成新的頁面,可以大大節省作業量
③ 因時因人而變:當不同的時間,不同的人訪問同一網址時會產生不同的頁面 訪問的用戶的權限、身份
二、HTTP 協議
1. 概述
-
HTTP 超文本傳輸協議 (HyperText TransferProtocol) 是互聯網上應用最為廣泛的一種網路協議,它是基于 TCP/IP協議的應用層傳輸協議,簡單來說就是客戶端和服務端進行資料傳輸的一種規則,
-
HTTP/HTTPS 是應用層上的協議,建立在傳輸層 TCP 之上,客戶端通過與服務端進行 TCP 連接(三次握手),之后發送 HTTP 請求與接收 HTTP 回應都是通過訪問 Socket 介面來呼叫 TCP 協議實作,(每次都會呼叫)
2. 三次握手,四次斷開
- 三次握手
SYN: Synchronize Sequence Numbers,同步序列編號,建立連接的信號,客戶端在接受到 SYN 訊息時,就會在自己的段內生成一個隨機值 X,
SYN-ACK:服務器收到 SYN 后,打開客戶端連接,發送一個 SYN-ACK 作為答復,確認號設定為比接收到的序列號多一個,即 X + 1,服務器為資料包選擇的序列號是另一個亂數 Y,
ACK:Acknowledge character, 確認字符,表示發來的資料已確認接收無誤,最后,客戶端將 ACK 發送給服務器,序列號被設定為所接收的確認值即 Y + 1,
FIN: 斷開連接信號
當客戶端與服務端建立TCP協議時:
① 首先客戶端會發送一個SYN,例如X,
② 當服務端收到后回傳確認訊息X+1,以及連接資料包亂數Y,這就是SYN-ACK
③ 客戶端收到后回傳最后確認字符Y+1,這就是ACK,
如果客戶端這個時候發現服務端回傳的并不是X+1,會重新發起SYN,直至正確方可連接,這也就是他的重試機制
其實說白了三次握手就是當客戶端發起申請后不僅客戶端要確認服務端,服務端也要確認客戶端,所以為什么兩次就不行,多一次又繁瑣,
好比如撥通電話:
A: 喂,你好,能聽見我說話嗎?(SYN請求)
B:能聽見,(ACK回應)你能聽見我說話嗎?(SYN請求)
A:能聽見,(ACK回應)
三次握手,確認建立連接,

- 四次斷開
① 當客戶端決定斷開時,向服務端發送FIN信號,進入 FIN_WAIT_1 狀態,等待來自服務器的 ACK 回應
② 客戶端收到服務器發送的 ACK 回應后,客戶端就進入 FIN_WAIT_2 狀態,然后等待來自服務器的 FIN 信號
③ 服務器發送 ACK 確認訊息后,一段時間(可以配置關閉)會發送 FIN 信號給客戶端,告知客戶端可以進行關閉,
④ 客戶端收到從服務端發送的 FIN 訊息時,客戶端就會由 FIN_WAIT_2 狀態變為 TIME_WAIT 狀態,在這里要注意這個時候客戶端可以重新連接到服務端為了防止資訊丟失,如果不進行連接,那么在一段時間連接關閉,客戶端所有資料包括埠號快取資料等全部釋放
掛斷電話例子:
A:我要掛電話了,(FIN請求)
B:好的,(ACK回應)
B:那我也掛電話了,(FIN請求)
A:好的,(ACK回應)
四次揮手,連接關閉,

- 為什么是三次握手,而不是二次?
為了實作可靠資料傳輸, TCP 協議的通信雙方, 都必須維護一個序列號, 以標識發送出去的資料包中, 哪些是已經被對方收到的, 三次握手的程序即是通信雙方相互告知序列號起始值, 并確認對方已經收到了序列號起始值的必經步驟
如果只是兩次握手, 至多只有連接發起方的起始序列號能被確認, 另一方選擇的序列號則得不到確認
- 為什么是四次斷開?
因為當 Server 端收到 Client 端的 SYN連 接請求報文后,可以直接發送SYN+ACK報文,其中ACK報文是用來應答的,SYN報文是用來同步的,但是關閉連接時,當Server端收到FIN報文時,很可能并不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,“你發的FIN報文我收到了”,只有等到我Server端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步握手,
3. 無狀態協議
-
無狀態協議是指瀏覽器對于事務的處理沒有記憶能力也就是說服務器并不知道客戶端進行了什么操作,比如關閉瀏覽器再開啟訪問等
-
HTTP 是一種無狀態 (stateless) 協議,HTTP 協議本身不會對發送過的請求和相應的通信狀態進行持久化處理(存盤、保存〉,
-
這樣做的目的是為了保持 TCP 協議的簡單性,從而能夠快速處理大量的事務,提高效率,
-
然而,在許多應用場景中,我們需要保持用戶登錄的狀態或記錄用戶購物車中的商品,由于 HTTP 是無狀態協議,所以必須引入一些技術來記錄管理狀態,例如 cookie,
Cookie 是一種在客戶端保持 HTTP 狀態資訊的技術,它好比商場發放的優惠卡,
Cookie是在瀏覽器訪問WEB服務器的某個資源時,由WEB服務器在HTTP回應訊息頭中附帶傳送給瀏覽器的一片資料,WEB服務器傳送給各個客戶端瀏覽器的資料是可以各不相同的,
一旦WEB瀏覽器保存了某個Cookie,那么它在以后每次訪問該WEB服務器時,都應在HTTP請求頭中將這個Cookie回傳給WEB服務器,
Session技術是一種將會話狀態保存在服務器端的技術 ,它可以比喻成是醫院發放給病人的病歷卡和醫院為每個病人保留的病歷檔案的結合方式 ,
客戶端需要接收、記憶和回送 Session的會話標識號,Session可以且通常是借助Cookie來傳遞會話標識號,
cookie 和session 都為了實作 http 的短期的持久化(記憶體/快取方式,查詢快、效率比較高)
兩者對比: cookie 省服務器性能而 session 更安全
4. HTTP 版本
- HTTP 0.9:己過時,只接受 GET 一種請求方法,沒有通信中指定版本號,且不支持請求頭,
- HTTP 1.0:這是第一個在通信中指定版本號的 HTTP 協議版本,至今仍被廣泛采用,特別是在代理服務器中,
- HTTP 1.1:當前版本,持久連接被默認采用,并能很好地配合代理服務器作業;還支持以管道形式同時發送多個請求,以便降低線路負載,提高傳輸速度,
- HTTP 2.0:HTTP2.0是 HTTP 協議自1999年HTTP1.1發布后的首個更新,大幅度的提高了web性能,在HTTP1.1完全語意兼容的基礎上,進一步減少了網路的延遲,實作低延遲高吞吐量,
HTTP1.0 和 HTTP1.1 之間區別:
① 快取處理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為快取判斷的標準,HTTP1.1則引入了更多的快取控制策略例如Entitytag,If-Unmodified-Since,If-Match,If-None-Match等更多可供選擇的快取頭來控制快取策略,
② 帶寬優化及網路連接的使用
HTTP1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個物件的一部分,而服務器卻將整個物件送過來了,并且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即回傳碼是206 (PartialContent),這樣就方便了開發者自由的選擇以便于充分利用帶寬和連接
③ 錯誤通知的管理
在HTTP1.1中新增了24個錯誤狀態回應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突;410(Gone)表示服務器上的某個資源被永久性的洗掉
④ HOST域
在HTTP1.0中認為每臺服務器都系結一個唯一的IP地址,因此,請求訊息中的URL并沒有傳遞主機名,HTTP1.0沒有host域,隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址,HTTP1.1的請求訊息和回應訊息都支持host域,且請求訊息中如果沒有host域會報告一個錯誤(400 Bad Request),
5. HTTP 方法
- HTTP 支持幾種不同的請求命令,這些命令被稱為 HTTP 方法,每條 HTTP 請求報文都包含一個方法,告訴服務器要執行什么動作,包括獲取一個頁面、允許一個網關程式、洗掉一個檔案等,
- 其中,最常用的方法是 GET、POST,如下:
| 方法 | 描述 |
|---|---|
| GET | 請求獲取Request-URI 所標識的資源 |
| PUT | 請求服務器存盤一個資源,并用Request-URI作為其標識 |
| DELETE | 請求服務器洗掉 Request-URI所標識的資源 |
| POST | 在Request-URI所標識的資源后附加新的資料 |
| HEAD | 請求獲取由 Request-URI所標識的資源的回應訊息報頭 |
- GET 和 POST 方法比較
① 語意上的區別:
Get向服務器請求資料,依照HTTP協議,get是用來請求資料,
Post向服務器發資料,依照HTTP協議,Post的語意是向服務器添加資料,也就是說按照post的語意,該操作是會修改服務器上的資料
② 服務器請求的區別:
Get請求是可以被快取,比如訪問百度,訪問的方式就是GET,此時訪問后的內容會緩被存在瀏覽器中,短時間再次訪問,其實是拿到的瀏覽器中的快取內容另外Get請求只能接收ASCII碼的回復,
Post請求是不可以被快取的,對于Post方式提交表單,重繪頁面瀏覽器會彈出提示框 “是否重新提交表單”,Post可以接收二進制等各種資料形式,所以如果要上傳檔案一般用Post請求
③ 引數放請求頭和請求體的差別:
Get請求通常沒有請求體,在Tce傳輸中只需傳輸一次(而不是一個包),所以Get請求效率相對高,
Post請求將資料放在請求體中,而實際傳輸中,會先傳輸完請求頭,再傳輸請求體,是分為兩次傳輸的(而不是兩個包),Post請求頭會比get更小(一般不帶引數),請求頭更容易在一個TCP包中完成傳輸,更何況請求頭中有content-Length的標識,可以更好地保證 HTTP 包的完整性,
| \ | GET 方法 | POST 方法 |
|---|---|---|
| 對資料長度的限制 | URL 的長度是受限制的(URL 的最大長度是2048個字符) | 無限制 |
| 快取 | 能被快取 | 不能被快取 |
| 安全性 | 與POST相比, GET的安全性較差,因為所發送的資料是URL的一部分,在發送密碼或其他敏感資訊時絕不要使用GET | POST比GET更安全,因為引數不會被保存在瀏覽器歷史或Web服務器日志中 |
| 歷史 | 引數保留在瀏覽器歷史中 | 引數不會保存在瀏覽器歷史中 |
| 后退按鈕/重繪 | 無害 | 資料會被重新提交(瀏覽器應該告知用戶資料會被重新提交) |
| 書簽 | 可收藏為書簽 | 不可收藏為書簽 |
6. HTTP 狀態碼
- HTTP 狀態碼(HTTP Status Code)是用以表示網頁服務器 HTTP 回應狀態的3位數字代碼,當瀏覽器請求某一URL 時,服務器會根據處理情況回傳相應的處理狀態,
- HTTP狀態碼可以分為五大類,如下表所示,其中2XX、3XX表示請求正常,4XX、5XX表示出現例外情況,
| 狀態碼首位 | 已定義范圍 | 分類 |
|---|---|---|
| 1xx | 100-101 | 資訊提示 |
| 2xx | 200-206 | 成功 |
| 3xx | 300-305 | 重定向 |
| 4xx | 400-415 | 客戶端錯誤 |
| 5xx | 500-505 | 服務器錯誤 |
- 生產環境常見的狀態碼如下所示
| 訊息 | 描述 |
|---|---|
| 200 OK | 請求成功(其后是對GET和POST 請求的應答檔案) |
| 301 Moved Permanently | 請求的永久頁面跳轉 |
| 403 Forbidden | 禁止訪問該頁面 |
| 404 Not Found | 服務器無法找到被請求的頁面 |
| 500 Internal Server Error | 內部服務器錯誤 |
| 502 Bad Gateway | 無效網關 |
| 503 Service Unavailable | 當前服務不可用 |
| 504 Gateway Timeout | 網關請求超時 |
總結
- POST 和 GET 方法在快取、安全性、長度限制等方面各有不同
- HTTP 協議請求回應以報文形式傳遞
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/304881.html
標籤:其他
上一篇:Nginx學習筆記
下一篇:Docker快速入門
