# 第一章 HTTP協議及網絡基礎
>作者:肖鵬 時間:2018-04-06
> HTTP協議是什么?
> 首先我們要知道http是什么?協議是什么?
> 在我理解就是,協議是兩方及其兩方以上共同約定的一種規則,所以這里協議就是指網絡中各方都遵守的一種協議,只有規則相同時,相互才能理解對方所說的話
> HTTP是HyperText Transfer Protocol 的縮寫,HyperText:超文本,Transfer:傳輸,Protocol:協議,合起來就是超文本傳輸協議,這里超文本指的是超級文本,用超鏈接的方式將文本組合起來的網狀文本
> 原書內容:超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協議標準架構的發展根基。Ted Nelson組織協調萬維網協會(World Wide Web Consortium)和互聯網工程工作小組(Internet Engineering Task Force )共同合作研究,最終發布了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1。
>
> --**[《百度百科》](https://baike.baidu.com/item/http/243074)**
## 1.1 HTTP信息
> HTTP:超文本傳輸協議(原名為:超文本轉移協議)
現在使用的是HTTP/1.1版本,并記載于[RFC2616](https://tools.ietf.org/html/rfc2616)
> HTTP協議用于客戶端和服務器端之間的通信
>
> 通過請求和響應的交換進行通信
>
> HTTP是不保存狀態的協議
## 1.2 網絡基礎TCP/IP
> TCP/IP這里不詳細講,詳細內容查看TCP/IP筆記
### 1.2.1 TCP/IP協議族
> 不同的硬件、操作系統之間的通信,所有這一切都需要一種規則。這種規則就是協議,也就是說協議就是網絡世界的規則
TCP/IP:
- 一種為指TCP和IP兩種協議
- 另一種說法是在IP協議的通信過程中,所使用的協議族的統稱
### 1.2.2 TCP/IP分層管理
* 應用層
* 傳輸層
* 網絡層
* 數據鏈路層
1. 應用層:決定了向用戶提供應用服務時通信的活動。比如:FTP、DNS和HTTP等等
2. 傳輸層:傳輸層對上層應用層,提供處于網絡連接中的兩臺計算機之間的數據傳輸。比如TCP(傳輸控制協議:Transmission Control Protocol)和UDP(用戶數據包協議:User Data Protocol)
3. 網絡層:處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規定了通過怎樣的路徑到達對方計算機,也就是說它是選擇傳輸路線的
4. 鏈路層:用來處理連接網絡的硬件部分,包括控制操作系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡)等等
> 把數據信息包裝起來的方法叫做封裝
## 1.3 與HTTP關系密切的協議
### 1.3.1 IP協議
> IP:負責傳輸的協議
IP協議位于網絡層(Internet Proctor)幾乎所有的網絡系統都會使用到IP協議,IP地址與IP協議是不同的
傳輸過程中需要兩個重要條件,一個是IP地址,一個為MAC地址
IP地址指明了節點被分配到的地址,MAC地址是指網卡所屬的固定地址;IP地址和MAC地址可以相互匹配,IP地址可以改變,但MAC地址一半保持不變
IP間的通信依賴于MAC地址。在網絡上,一般傳輸時,雙方不處于同一局域網內,所以這時我們需要經過多臺計算機轉發才可以達到對方,而在中轉時會利用下一站中轉設備的MAC地址來搜索下一個中轉目標,這時,會采用ARP協議(Address Resolution Protocol),ARP是一個地址解析協議,根據通信方的IP地址就可以反查出對應的MAC地址
因為網絡世界很大,我們無法全部掌握,所以在傳輸中不能準確的選擇發送到目標,所以我們采用路由選擇機制,這種機制和快遞很像:比如從西安發往哈爾濱
1. 首先你將快遞送到本區的集散點,才能確定是否可以發送至哈爾濱
2. 然后快遞公司收取,送至下個目標點西安總公司,查看目標地點,發現是哈爾濱的
3. 然后發往下個目標點黑龍江省總公司,因為哈爾濱是省會,所以相當于發往哈爾濱的總公司
4. 繼續查找下個目標地點,為哈爾濱某個區,發往此處,到達目標點
### 1.3.2 TCP協議
> 確保可靠性的協議
為了能夠無誤地將數據送達到目標,TCP協議采用了三次握手策略。用TCP協議把數據包發送出去后,TCP不會對傳遞后的情況置之不理,而是等待向對方確認是否成功發送。在此過程中使用了TCP的標志(flag)-SYN(synchronize)和ACK(acknowledgment)
**以下圖例顯示TCP的三次握手:**
| 發送端 | 數據 | 接收端 |
| --- | --- | -- |
| ==> | 標有SYN的數據包發送 | ==> |
| <== | 返回信息并且發送標有SYN/ACK數據包 | <== |
| ==> | 返回信息并發送標有ACK的數據包 | ==> |
### 1.3.3 DNS服務
> 和HTTP服務一樣位于應用層,提供域名到IP地址之間的解析服務
你是否有過本地測試代碼,因為localhost不好輸入,不美觀而頭痛,在這里我寫了一個關于修改IIS的host文件來改變域名的DNS解析,讓其指向本地127.0.0.1 **[博客地址,點擊訪問](https://www.cnblogs.com/spirit-ling/p/8646895.html)**
## 1.4 URI和URL
> - URI:統一資源標識符
> - URL:統一資源定位符
### 1.4.1 統一資源**標識符**(URI)
> URI是Uniform Resource Identifier 的縮寫。RFC2396分別對這3個單詞進行了如下定義
- **Uniform(統一的,制服)**:規定統一的格式可方便的處理多種不同類型的資源,而不用根據上下文環境來識別資源指定的訪問方式。另外,加入新增的協議方案(如:HTTP:或FTP:)也更容易
- **Resource(資源,財力)**:資源的定義是“可標識的任何東西”。除了文檔文件、圖像或服務(例如當天的天氣預報)等能夠區別于其他類型的,全都可作為資源。另外,資源不僅可以是單一的,也可以是多數的集合體
- **Identifier(標識符,認同者)**:表示可標識的對象。也稱作標識符。
> **URL格式:**
>
> 例子:http://user:pass@www.example.com:80/dir/index.html?uid=1#hash2
- **http:// ->** :協議類型,除了http以外有ftp,mailto,news,tel,telnet,urn等等,這里只列出常見的,也可以使用data:或javascript:這類指定數據或腳本程序的方案名,必選項
- **user:pass ->** :登錄信息(認證),指定用戶名和密碼作為從服務器端獲取資源時必要的登錄信息,現在不常用,可選項
- **www.example.com ->** :服務器地址,也可以使用IP地址,必選項
- **80 ->** :端口號,不輸入時,默認端口號,可選項
- **dir/index.html ->** :帶層次的文件路徑,指定服務器上的文件路徑來定位特指的資源
- **?uid=1 ->** :查詢字符串,可選
- **#hash2 ->** :片段標識符,hash值,可做錨點,可做前段路由,可選
### 1.4.2 統一資源**定位符** (URL)
> 統一資源定位符是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它
> 它最初是由蒂姆·伯納斯·李發明用來作為萬維網的地址。現在它已經被萬維網聯盟編制為互聯網標準[RFC1738](https://tools.ietf.org/html/rfc1738)了。
> 作者:肖鵬 時間:2018-04-06
- 首語
- 第一章 HTTP協議及網絡基礎
- 第二章 協議返回狀態碼
- 第三章 HTTP通用首部字段
- 第一節 Cache-Control字段
- 第二節 Connection 字段
- 第三節 Date 字段
- 第四節 Pragma 字段
- 第五節 Trailer 字段
- 第六節 Transfer-Encoding 字段
- 第七節 Upgrade 字段
- 第八節 Via 字段
- 第九節 Warning 字段
- 第四章 HTTP請求首部字段
- 第一節 Accept 字段
- 第二節 Accept-Charset 字段
- 第三節 Accept-Encoding 字段
- 第四節 Accept-Language 字段
- 第五節 Authorization 字段
- 第六節 Expect 字段
- 第七節 From 字段
- 第八節 Host 字段
- 第九節 If-Match 字段
- 第十節 If-Modified-Since 字段
- 第十一節 If-None-Match 字段
- 第十二節 If-Range 字段
- 第十三節 If-Unmodified-Since 字段
- 第十四節 Max-Forwards 字段
- 第十五節 Proxy-Authorization 字段
- 第十六節 Range 字段
- 第十七節 Referer 字段
- 第十八節 TE 字段
- 第十九節 User-Agent 字段
- 第五章 HTTP響應首部字段
- 第一節 Accept-Ranges 字段
- 第二節 Age 字段
- 第三節 ETge 字段
- 第四節 Location 字段
- 第五節 Proxy-Authenticate 字段
- 第六節 Retry-After 字段
- 第七節 Server 字段
- 第八節 Vary 字段
- 第九節 WWW-Authenticate 字段
- 第六章 HTTP實體首部字段
- 第一節 Allow 字段
- 第二節 Content-Encoding字段
- 第三節 Content-Language 字段
- 第四節 Content-Length 字段
- 第五節 Content-Location 字段
- 第六節 Content-MD5 字段
- 第七節 Content-Range 字段
- 第八節 Content-Type 字段
- 第九節 Expires 字段
- 第十節 Last-Modified 字段
- 第七章 Cookie相關和其他的首部字段