1. 程式人生 > 其它 >web基礎與HTTP

web基礎與HTTP

一、前言
本節將介紹 Web 基礎知識,包括域名的概念、DNS 原理、靜態網頁和動態網頁的 相關知識

二、DNS與域名

1、網路是基於 TCP/IP 協議進行通訊和連線的,每一臺主機都有一個唯一的標識(固定的 IP 地址),用以區別在網路上成千上萬個使用者和計算機。網路在區分所有與之相 連的網路和主機時,均採用一種唯一、通用的地址格式,即每一個與網路相連線的計算機和伺服器都被指派一個獨一無二的地址


七層參考模型和五層 ,邏輯網絡卡和物理網絡卡 bond

2、為了保證網路上每臺計算機的 IP 地址的唯 一性,使用者必須向特定機構申請註冊,分配 IP 地址
網路中的地址方案分為兩套:IP 地址系統和域名地址系統。這兩套地址系統其實是一一對應的關係
由於 IP 地址是數字標識,使用時難以記憶和書寫,因此在IP 地址的基礎上又發展出一種符號化的地址方案,來代替數字型的 IP 地址


小結:
1、網路上互動是基於TCP/IP協議的,每個主機在邏輯上有一個唯一位置標識(IP地址),實體地址為MAC地址
2、為了保證地址唯一性,使用者協議向特地給機構申請註冊,分配IP地址網路中的地址有兩套方案:
① IP地址系統
② 域名地址系統
而由於IP是由32位二進位制數字標識,不方便記憶,所以 以IP地址為基礎發展出了符號化地址來代替解決方案,也是是域名

DNS解析方式,三種:
① /etc/hosts
linux系統中負責快速解析的檔案,包含了ip與主機名的對映關係,在沒有DNS伺服器的情況下,使用本地/etc/hosts完成解析/對映,實現快速訪問
PS: 主要用於主機之間(IP和主機名)的對映/解析關係,示例:
192.168.226.128 master
192.168.226.129 node1
192.168.226.130 node2

② /etc/resolv.conf
DNS客戶端配置檔案,主要用於設定DNS伺服器的IP和域名,還包含了主機域名的搜尋順序等等,這個檔案是由域名解析器(resolver,一個根據主機名解析IP地址的庫)使用的配置檔案。
PS:主要用與匹配DNS伺服器,示例:
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 218.2.135.1

③ /etc/sysconfig/network-scripts/ifcfg-ens33
我們也可以在網絡卡配置檔案中定義DNS1= DNS2=


生效順序 1 hosts檔案 2 網絡卡配置檔案 3 /etc/resolv.conf

二、域名
1、定義: 標識一組主機並提供它們的有關資訊的樹形結構(主要確定了根在哪,就可以確定每個分支)
www.baidu.com
域名伺服器(分散式,每臺主機維護一個部分):
① 保持和維護域名空間的程式
② 響應解析器的請求

解析端(客戶端)
向DNS伺服器發出請求的裝置

2、域名空間結構(從右往左看)
① 根域 位於域名空間最頂層,一般用一個 “.” 表示
基礎單位,除了根域 其他都只有一個上級域,有0或多個子域,同層域不可重複的子域或域名

② 頂級域
一般代表一種型別的組織機構或國家地區(主要有此兩種型別構成),如 net(網路公司)、com(商業)、org(民間團體組織)、edu(教育)、gov(政府)、mil(軍事)、cn(中國)、jp(日本)、hk(中國香港)

③ 二級域
用來標明頂級域內的一個特定的組織,國家頂級域下面的二級域名由國家網路部門統一管理,如 .cn 頂級域名下面設定的二級域名:.com.cn、.net.cn、.edu.cn …

④ 子域
用來標明頂級域內的一個特定的組織,國家頂級域下面的二級域名由國家網路部門統一管理,如 .cn 頂級域名下面設定的二級域名:.com.cn、.net.cn、.edu.cn …

主機
主機位於域名空間最下層,就是一臺具體的計算機,如 www、mail、都是具體的計算機名字,可用www.sina.com.cn.、mail.sina.com.cn. 來表示,這種表示方式稱為 FQDN (完全合格域名),也是這臺主機在域名中的全名

3、域名註冊
域名註冊是Internet中用於解決地址對應問題的一種方法
遵循先申請先註冊原則
域名註冊步驟:
準備申請資料————》尋找域名註冊網站————》查詢域名————》正式申請————》申請成功

三、網頁(HTTP/HTTPS)
1、網頁基本概念
① 網頁
純文字格式檔案
編寫語言為HTML
在使用者的瀏覽器中被“翻譯”成網頁形式顯示出來

② 網站
由一個一個頁面構成的,是多個網頁的結合體
主頁
開啟網站後出現的第一個網頁稱為網站主頁(或首頁)

③ 域名
瀏覽網頁時輸入的網址

④ HTTP/HTTPS
用來傳輸網頁的通訊協議(是否加密),是一種通訊/互動的標準/規範

⑤ URL
是一種全球資訊網定址系統

⑥ HTML
用來編寫網頁的超文字標記語言

⑦ 超連結
超連結是將網站中不同網頁連結起來的功能

⑧ 釋出
將製作好的網頁上傳到伺服器供使用者訪問的過程

2、HTML
① HTML超文字標記語言
Hyper Text Markup Language
網頁的“原始碼”
瀏覽器:“解釋和執行”HTML原始碼的工具

② HTML文件的結構
HTML網頁
頭部部分
標題部分
主體部分
網頁內容,包括文字、影象等

示例:
<html>
<head>
<title>我的第一個網頁 </title>
</head>

<body >
Hello World!
</body>

</html>

●頭標籤中常用標籤:
標籤 描述
<title> 定義了文件的標題
<base> 定義了頁面連結標籤的預設連結地址
<link> 定義了一個文件和外部資源之間的關係
<meta> 定義了 HTML 文件中的元資料
<script> 定義了客戶端的指令碼檔案
<style> 定義了 HTML 文件的樣式檔案

●內容標籤中常用標籤
標籤 描述
<table> 定義一個表格
<tr> 定義了表格中的一行
<td> 定義了表格中某一行的一列
<img> 定義了一個影象
<a> 定義了一個超連結
<p> 定義了一行
<br> 定義了換行
<font> 定義了字型


③ 網頁基本標籤2-1
網頁摘要資訊的作用
有利於瀏覽器解析
有利於搜尋引擎搜尋
<title>標籤 #標題
<meta>標籤 #元標誌

④ 標題標籤型別:
行控制相關標籤
範圍標籤
影象標籤
超連結標籤
特殊符號

四、Web
1 Web概述
Web(World Wide Web)即全球廣域網,也稱為全球資訊網
一種分散式圖形資訊系統
建立在Internet上的一種網路服務

2 Web1.0 vs Web2.0
Web1.0
以編輯為特徵,網站提供給使用者的內容是編輯處理後的,然後使用者閱讀網站提供的內容
這個過程是網站到使用者的單向行為
Web2.0
更注重使用者的互動作用,使用者既是網站內容的消費者(瀏覽者),也是網站內容的製造者
加強了網站與使用者之間的互動,網站內容基於使用者提供,網站的諸多功能也由使用者參與建設,實現了網站與使用者雙向的交流與參與
Web2.0特徵
使用者分享、以興趣為聚合點的社群、開放的平臺,活躍的使用者

3 靜態頁面 與動態頁面
(1) 靜態頁面定義
① 靜態網頁是標準的HTML檔案
② 副檔名是.htm、.html
例如文字、影象、聲音、Flash動畫、客戶端指令碼和ActiveX控制元件及Java小程式等
③ 是網站建設的基礎,早期網站一般都由靜態網頁製作
④ 沒有後臺數據庫、不含程式和不可互動的網頁
⑤ 相對更新起來比較麻煩,適用於一般更新較少的展示型網站

(2)靜態頁面特點:
① 每個靜態網頁都有一個固定的URL,且URL以.htm、.html、.shtml等常見形式為字尾,而不含有“?”
② 網頁內容一經發布到網站伺服器上,無論是否有使用者訪問,每個靜態網頁都是儲存在網站伺服器上的
③ 靜態網頁的內容相對穩定,容易被搜尋引擎檢索
④靜態網頁沒有資料庫的支援,在網站製作和維護方面工作量較大,因此當網站資訊量很大時完全依靠靜態網頁製作方式比較困難
⑤ 靜態網頁的互動性較差,在功能方面有較大的限制
⑥ 頁面瀏覽速度迅速,過程無需連線資料庫,開啟頁面速度快於動態頁面

(3) 動態頁面
① 網頁 URL不固定,能通過後臺與使用者互動
② 在動態網頁網址中有一個標誌性的符號——“?”
③ 常用的語言有PHP、JSP、Python、Ruby等

(4) 動態頁面特點
① 互動性
網頁會根據使用者的要求和選擇而動態改變和響應,將瀏覽器作為客戶端介面,這將是今後WEB發展的大勢所趨
② 自動更新
無須手動地更新HTML文件,便會自動生成新的頁面,可以大大節省工作量
③ 因時因人而變
當不同的時間,不同的人訪問同一網址時會產生不同的頁面

五、HTTP協議概述
1、HTTP協議簡介、版本
HTTP(超文字傳輸協議HyperText Transfer Protocol)協議是網際網路上應用最為廣泛的一種網路協議,它是基於TCP協議的應用層傳輸協議,簡單來說就是客戶端和服務端進行資料傳輸的一種規則。

HTTP/HTTPS是應用層上的協議,建立在傳輸層TCP之上,客戶端通過與服務端進行TCP連線(三次握手),之後傳送HTTP請求與接收HTTP響應都是通過訪問Socket介面來呼叫TCP協議實現。

HTTP 是一種無狀態 (stateless) 協議, HTTP協議本身不會對傳送過的請求和相應的通訊狀態進行持久化處理(儲存,儲存)。這樣做的目的是為了保持HTTP協議的簡單性,從而能夠快速處理大量的事務, 提高效率。

然而,在許多應用場景中,我們需要保持使用者登入的狀態或記錄使用者購物車中的商品。由於HTTP是無狀態協議,所以必須引入一些技術來記錄管理狀態,例如Cookie。

cookie和session都為了實現的是http的短期的持久化(記憶體/快取方式,查詢快、效率比較高)cookie
是快取在使用者端(client)瀏覽器中的(預設快取一天),當下次客戶端通過同一個瀏覽器訪問客戶端的時候,會優先讀取cookie中的快取資訊,向服務端進行請求,同時服務端收到客戶端請求的時候,讀取到cookie檔案,知道客戶端之前找的是伺服器A處理的任務,為了省事兒,省資源,乾脆直接講請求直接再交給伺服器A處理
兩者對比:
cookie 省伺服器效能
session 更安全
1、為後面服務、叢集、功能優化做鋪墊Ⅰ
2、具體解釋了怎麼解決HTTP無狀態協議的持久化/儲存。

HTTP1.0和HTTP1.1之間的區別
① 快取處理
在HTTP1.0中主要使用header裡的If-Modified-Since,Expires來做為快取判斷的標準,HTTP1.1則引入了更多的快取控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的快取頭來控制快取策略。

② 頻寬優化及網路連線的使用
HTTP1.0中,存在一些浪費頻寬的現象,例如客戶端只是需要某個物件的一部分,而伺服器卻將整個物件送過來了,並且不支援斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用頻寬和連線

③ 錯誤通知的管理
在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示伺服器上的某個資源被永久性的刪除

④ Host頭處理
在HTTP1.0中認為每臺伺服器都繫結一個唯一的IP地址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求訊息和響應訊息都應支援Host頭域,且請求訊息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)

⑤ 長連線
HTTP 1.1支援長連線(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連線上可以傳送多個HTTP請求和響應,減少了建立和關閉連線的消耗和延遲,在HTTP1.1中預設開啟Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要建立連線的缺點

2、HTTP 請求格式( GET / POST 方式 )

(1)GET 方式
① 請求行
請求的方式
請求的資源路徑
請求的版本協議號

② 請求頭(描述資訊/標準化資訊)
Accept:客戶端可以接受的資料型別
Accept-Language:客戶端可以接受的語言型別
User-Agent:瀏覽器的資訊
Accpect-Encoding:客戶端可以接受的編碼格式
Host:表示請求的ip和埠號
Connection:告訴伺服器請求連線如何處理
Keep-Alive:通知伺服器回傳資料不要馬上關閉,保持一小段的連線
Closed:馬上關閉

(2)POST 請求方式
① 請求行
請求的方式
請求的資源路徑
請求的協議的版本號

② 請求頭

Accept:客戶端可以接受的資料型別
Accept-Language:客戶端可以接受的語言型別
Referer:表示請求發起時,瀏覽器位址列中的地址
User-Agent:瀏覽器的資訊
Content-Type:傳送的資料型別
Content-Length:傳送的資料長度

③ 請求體:就是傳送給伺服器的資料


(3)GET 與POST 區別
① 區別一:語義上的區別
Get向伺服器請求資料,依照HTTP協議,get 是用來請求資料。
Post向伺服器發資料,依照HTTP協議,Post的語義是向伺服器新增資料,也就是說按照Post的語義,該操作是會修改伺服器上的資料

② 區別二:伺服器請求的區別
Get請求是可以被快取,示例:
訪問百度,訪問的方式就是GET,此時訪問後的內容會緩被存在瀏覽器中,短時間再次訪問,其實是拿到的瀏覽器中的快取內容
另外Get請求只能接收ASCII碼的回覆
Post請求是不可以被快取的。對於Post方式提交表單,重新整理頁面瀏覽器會彈出提示框“是否重新提交表單”,
Post可以接收二進位制等各種資料形式,所以如果要上傳檔案一般用Post請求

③ 區別三:引數放請求頭和請求體的差別
Get請求通常沒有請求體(當然這也是可以由程式猿心情改變的),在TCP傳輸中只需傳輸一次(而不是一個包),
所以Get請求效率相對高。
Post請求將資料放在請求體中,而實際傳輸中,會先傳輸完請求頭,再傳輸請求體,是分為兩次傳輸的(而不是兩個包)。
Post請求頭會比Get更小(一般不帶引數),請求頭更容易在一個TCP包中完成傳輸,更何況請求頭中有Content-Length的標識,可以更好地保證Http包的完整性。

GET方法:
從指定的伺服器上獲得資料
GET請求能被快取
GET請求會儲存在瀏覽器的瀏覽紀錄裡(cookit)
GET請求有長度的限制
主要用於獲取資料
查詢的字串會顯示在URL中,不安全

###POST方法:
提交資料給指定伺服器處理
POST請求不能被快取
POST請求不會儲存在瀏覽器的瀏覽紀錄裡
POST請求沒有長度限制
查詢的字串不會顯示在URL中,比較安全


HTTP狀態碼:

當使用瀏覽器訪問某一個URL,會根據處理情況返回相應的處理狀態
通常正常的狀態碼為2xx,3xx(如200)
如果出現異常會返回4xx,5xx(如404)

狀態碼首位 已定義範圍 分類
1xx 100-101 資訊提示
2xx 200-206 成功
3xx 300-305 重定向
4xx 400-415 客戶端錯誤
5xx 500-505 伺服器錯誤


生產環境常見的HTTP狀態碼
訊息 描述
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 閘道器請求超時

3、HTTP協議請求流程分析【圖2】


使用者輸入URL(地址連結)(http://www.baidu.com:80/tools.html)客戶端獲取到埠及主機名後,客戶端利用DNS解析域名,首先客戶端的瀏覽器會先找自身的快取,如果有解析結束,如果沒有客戶端會去找host檔案,如果host檔案沒有的話,客戶端會去找本地的DNS快取伺服器,本地的DNS快取伺服器沒有的話,快取伺服器會去找根域,根域沒有,會返回一個.com.然後本地快取伺服器會去找頂級域,頂級域沒有的話會返回baidu.com.,然後本地快取伺服器會去找二級域,二級域解析完後會返回客戶端。

客戶端解析到IP地址後會通過TCP的三次握手與伺服器建立連線


HTTPS請求的整個過程的詳細分析
https://blog.csdn.net/seujava_er/article/details/90018326