【HTTP】HTTP通信

1. HTTP 翻譯爲 超文本傳輸協議,還是超文本轉移協議 ,圖靈社區有討論,https://www.ituring.com.cn/article/1817 感覺大家都是覺得之前的不妥,應該翻譯爲 超文本轉移協議。

個人的理解:

 

 

2. REST 的API 格式,看一看 《RESTful Web Services》 瞭解一下

 

3. HTTP 和 Socket的區別,個人感覺是一個東西,Socket 是網絡層建立通信用的,HTTP是應用層,規定傳輸協議用的,具體的區別,以後看看網上的資料。

 

4. 我認爲 ARP是一個 局域網協議,ARP 又稱爲 IP解析協議,通過IP地址 解析出 機器的MAC地址,看了一些資料,沒找到它跟局域網的直接關係。

我理解的現在的網絡通信是這樣吧。北京的A 要和 上海的B 通信,假如是在QQ上,此時可以獲取到B的IP地址,通過路由器定位到IP地址的大概範圍,具體到局域網,網段之後,通過 ARP協議,將IP地址解析爲 固定不變的MAC值,推送給機器。

大範圍的鎖定用IP地址,更精確的定位 用MAC值,

關於這塊的理解,可能還不太有錯,當我當下是這麼理解的。

 

5. HTTP 的 PUT 和 POST 方法,都能用來傳輸文件,

PUT 的請求每次都被執行,如果兩次請求相同,第二次的請求結果會將第一次的結果覆蓋掉

POST 的請求,如果兩次請求相同,會新增一個資源文件,

但是具體的實現方式 要看 服務端怎麼處理,可能是tomcat 或者 是代碼應用層面的內容處理。

HTTP的方法具體有: GET、POST、PUT、DELETE、OPTIONS、TRACE、HEAD、CONNECT、

HEAD: 用來獲取資源的首部信息,響應中的首部信息與Get方法一致。主要用來 更新緩存 測試資源可用性 測試資源是否被修改

 

 

6. HTTP 的狀態碼:(可以理解爲 通信的一種準則)

(狀態碼是爲了規範瀏覽器服務器的制定,希望瀏覽器和服務器的開發過程可以遵循,但是沒有辦法強制,比如302和303)

1XX :  Informational(信息性)    接收的請求正在處理

2XX :  Success (成功)              請求正常處理完畢

3XX :  Redirection(重定向)      需要進行附加操作以完成請求

4XX:  Client Error(客戶端錯誤)  服務器無法處理請求

5XX:  Server Error(服務端錯誤) 服務器處理請求出錯

(可以自定義,但是類別需要符合以上標準)

HTTP的狀態碼大概有60多種,常用的有14種:

2XX: 表明請求被正常處理了。

200  OK :請求被正常處理了,在Get方法中,響應內容在報文主體中,在HEAD方法中,響應內容在 頭部。

204 No Content : 響應報文中沒有報文實體,就是說沒有資源返回。

206 Partical Content: 範圍請求,只請求資源文件的一部分,用於 下載續傳。

3XX:  表明瀏覽器仍需要執行某些特殊處理,已處理請求。

301  Move Permanently : 永久性重定向,響應頭會包含Location,瀏覽器要繼續訪問新的URI以獲取資源,會更新書籤。

302 Found: 臨時重定向,本次有效,以後可能不生效,不會更新書籤。

303 See Other l臨時重定向,修改訪問方法,當服務器返回 新的URI之後,瀏覽器使用GET方法訪問新的URI獲取資源,(某些瀏覽器將302返回的uri,也只用GET的訪問新的地址)

當301、302、303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST請求改成GET請求,並刪除報文的主體,通過GET方法請求新的URI。
但是301、302是禁止將POST改成GET方法的,但大家實際上都是這麼幹的。

304 Not Modified : 使用瀏覽器的緩存處理,客戶端發送的GET請求報文中有 If-Match、If-Modified-Since、If-None-Match、If-Range、If-Un modified-Since的任意一個時,服務器可能返回304。

通常用在 瀏覽器發送了If-Modified-Since ,並攜帶E-tag(當前請求資源的hash值)請求這個時間段之後的該資源,服務器發現資源沒有更新時,同意瀏覽器使用本地的緩存處理時,返回304。關於304還有一個其他 頭部標識符,比如強制不使用緩存

304的響應頭中有Cache-Control :(max-age/public和private/no-cache/no-store/)

max-age: 緩存過期時間,在多長時間內,可以使用本地的緩存

public :第三方代理可以緩存

private:只能瀏覽器或客戶端緩存

no-cache:使用緩存時,需要通過E-tag請求服務器,以確定是否需要更新(不使用緩存中的過期資源)

no-store: 瀏覽器和第三方 web代理都不緩存資源,每次都請求服務器(不緩存)



If-Match : 如果匹配E-tag,則處理,否則,服務端不處理請求 (資源沒有被修改,可以處理)
(傾向於使用瀏覽器緩存,但是緩存沒有了,我想請求一下之前的資源,如果服務器資源更新了,那拒絕我吧)
如果不匹配,可以返回 412 狀態碼,之後可以使用本地緩存、

If-None-Match: 如果不匹配  E-tag,則處理,否則,服務端不處理(資源被修改了,可以處理)
(傾向於使用服務器最新資源文件,如果沒有更新,那服務器拒絕我吧,我可以用瀏覽器緩存資源)

(在Get和Head方法中,使用首部字段If-None-Match可以獲取最新的資源,這與If-Modified-Since相似)


Connection : 
標識只轉發給代理服務器的首部,代理服務器將Connection標識的首部以及Connection首部信息處理刪除,再轉發給 服務器。
一般用於 控制不再轉發給代理的首部字段 和 管理持久化連接。

持久連接:在HTTP/1.1之前,客戶端和服務器之間都是非持久連接,
在1.1之後默認是持久性連接,Connection:Keep-alive,Keep-Alive用來保證客戶端和服務器之間的持久性連接。
當服務器想要斷開連接時,使用Connetion傳遞一個Close字段即可。

307 Temporary Redirect  臨時重定向 ,當服務器返回307狀態碼,說明瀏覽器需要繼續請求新的URI,此時希望瀏覽器使用POST方法訪問新的URI。

(302是在HTTP/1.0的時候就有的,303和307是在HTTP/1.1的時候加入的,爲了細化302的規範,需要瀏覽器在被重定向之後,想要發GET請求,那就使用303,如果瀏覽器被重定向之後,想要發送POST請求,那就使用307狀態碼)。

 

4XX: 客戶端錯誤

400 Bad Request  : 請求報文中存在語法錯誤

401 Unauthorized : 標識請求的資源需要通過HTTP驗證(BASIC、DIGEST),響應頭中會包含一個 WWW-Authenticate首部用來質詢用戶信息,當瀏覽器第一次接收401響應時,會彈出認證用的對話窗口。(比如ActiveMQ經常見到)

403 Forbidden  :請求的資源地址被拒絕,服務器不允許訪問該資源,拒絕沒有原因,但可以在響應實體中加以說明,一般出現在沒有權限的情況下。、

404 Not Found : 表示服務器上無法找到請求的資源,也可以在服務器端拒絕請求,並不說明原因。

412 Preconditioned Failed : 如果請求中有 If-Match字段,服務器通過E-tag值對比,發現不匹配,可以返回412拒絕該次請求。

5XX: 服務器錯誤

500 Internal Server Error  :在執請求過程遇到問題,可能是 web應用存在的bug或者某些臨時的故障

503 Service Unavailable : 服務器暫時處於超負荷或者進行停機維護,現在無法處理請求。如果開發人員之後本次維護的時間,可以將需要的時間寫入 RetryAfter 首部字段中。

 

7. 虛擬主機映射 和 雲服務器的內網地址

如果只有一臺物理設備,需要提供多個Web服務,可以通過 域名匹配的方式映射到IP地址上,當用戶使用域名訪問時,DNS先將域名解析爲IP地址,定位到設備,之後,通過域名訪問具體的web應用,比如像 同一個服務器對外提供多個web服務。

雲服務一般都有 外網地址和內網地址,外網地址用於網絡通信,內網地址用於局域網通信。應該不是同一個物理設備,或者說 每個外網IP對應一塊網卡。

8. 代理、網關、隧道

代理: 客戶端和服務器之間的轉發者,可以用緩存、訪問控制、記錄訪問日誌等。兩種實現機制:是否使用緩存、是否修改報文

網關:具有處理功能的中間人,存儲映射表,他可以對請求進行處理轉發到合適的服務器應用上,客戶端和網關之間是HTTP通信,網關和服務器之間可以是非HTTP協議,網關還可以連接數據庫和其他接口做一些操作處理。

隧道:使用HTTP的Connect方法建立連接,使用SSL加密傳輸保證數據傳輸的安全性。透明傳輸。

 

8. 什麼是 HTTPS通信?

http是應用層協議,HTTP的報文結構有 請求行 、頭部信息、實體信息組成。

HTTP的通信是不安全的,可以通過加密方式來進行安全通信,一般有兩種實現方式。

第一種,通過HTTP在應用層將 實體信息進行加密,保證內容不被破解。

第二種,使用SSL的方式建立客戶端和服務器之間的可靠安全傳輸。SSL不屬於應用層也不屬於傳輸層, 在兩層之間的安全套接字,在應用層將報文內容傳遞給SSL,SLL使用公鑰對報文進行加密處理,再交給傳輸層TCP進行發送,服務器端接到數據之後,在SSL層將數據解密得到HTTP報文格式,再進行處理。

SSL:在建立通信的過程中,依靠CA體系,認證服務器證書,認證證書攜帶的公鑰信息,確定該服務器和公鑰信息是一致的。

SSL建立通信的過程在 TCP的三次握手成功之後,會請求服務器端證書。

TLS 是SSL標準化之後的產物,現在TLS的1.0版本與SSL的3.0版本幾乎沒有區別

 

記一下:簽名 驗籤和加密 解密

簽名驗籤:A使用私鑰對數據的摘要值做一個簽名值,同時發送 原文 簽名值 給B,B使用A的公鑰對簽名值解密,獲得摘要值,並對原文做摘要處理,得到一個摘要值,對比。確定 A是否是A,因爲只有 A擁有 公鑰的對應私鑰。

加密解密:A先產生一個密鑰(對稱密鑰),使用堆成公鑰對原文做加密處理,得到密文,並使用B的公鑰對對稱密鑰做加密處理,得到數字信封,發送 密文 和 被加密的對稱密鑰給B。B使用B的私鑰對 數字信封進行解密,得到對稱密鑰,使用對稱密鑰對密文解密得到 原文。(核心是:對稱密鑰加解密速度快)

(真實的通信情況是:A先和B協商 對稱密鑰,對稱密鑰確定之後,就使用對稱密鑰進行通信)

 

9. HTTP認證:

確認請求者身份,一般有 BASIC(基本認證)、DIGEST(摘要認證)、SSL(客戶端認證)、FormBase(表單認證)

BASIC和DIGEST,不常用了。而SSL成本較高,需要證書,一般也不用,除了保密性重要的地方,例如銀行的U盾等,

常用的就是 表單提交了,通過表單提交用戶信息,服務器返回一個 set_Cookie : SESSIONID=xxx。瀏覽器保存Cookie的內容,下次請求時,在請求頭中 添加 Cookie的SESSIONID,服務端就能區分請求來自某個已認證的用戶。

 

10. 如何實現Web服務的信息和客戶端之間同步

Ajax:異步通信,異步JavaScript與XML技術,有效利用JavaScript和DOM(文檔對象模型)的操作。局部替換web,部分請求

Ajax的核心技術是 XMLHttpRequest 的API,通過JavaScript腳本語言與服務器進行HTTP通信。

Comet :延遲應答,掛起連接,等服務器有更新了,再返回響應給客戶端。

SPDY:谷歌在 2010年提出的speedy。在應用層和傳輸層之間,添加了 會話層,用來管理建立起來的連接。控制對數據的流動。優點:多路複用流、賦予請求優先級、壓縮HTTP首部、推送功能、服務器提示功能。但是該技術應用推廣不佳。

WebSocket:應用層協議,Web瀏覽器和Web服務器之間的全雙工通信標準。

WebSocket是建立在HTTP基礎上協議,第一次請求依靠客戶端發起,等TCP連接建立成功之後,服務端會發送 upgrade:WebSocket 字段,來協商切換到 WebSocket協議,已處理之後的通信內容。這樣就由WebSocket全權接管了,任然依靠TCP通信,可以傳輸JSON、XML、HTML或任意格式的數據。(此時客戶端和服務端都能主動發送數據)(一共需要四次握手,第四次握手的響應狀態碼爲101 Switching Protocols)

優點:

推送功能,支持服務器端主動推送信息到客戶端

減少通信量:建立連接之後,就一直保持着,而且WebSocket的首部信息較少

 

10. XML解析器:

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章