【網絡】HTTP基礎總結

Http的報文結構

HTTP報文是面向文本的,報文中的每一個字段都是一些ASCII碼串,各個字段的長度是不確定的。HTTP有兩類報文:請求報文和響應報文。一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成。

(1)請求行
請求行由請求方法字段、URL字段和HTTP協議版本字段3個字段組成,它們用空格分隔。
例如,GET /index.html HTTP/1.1。
HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。這裏介紹最常用的GET方法和POST方法。
GET:當客戶端要從服務器中讀取文檔時,使用GET方法。GET方法要求服務器將URL定位的資源放在響應報文的數據部分,回送給客戶端。使用GET方法時,請求參數和對應的值附加在URL後面,利用一個問號(“?”)代表URL的結尾與請求參數的開始,傳遞參數長度受限制。例如,/index.jsp?id=100&op=bind。
POST:當客戶端給服務器提供信息較多時可以使用POST方法。POST方法將請求參數封裝在HTTP請求數據中,以名稱/值的形式出現,可以傳輸大量數據

(2)請求頭部
請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知服務器有關於客戶端請求的信息,典型的請求頭有:
1. User-Agent:產生請求的瀏覽器類型
2. Accept:客戶端可識別的內容類型列表
3. Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機

(3)空行
最後一個請求頭之後是一個空行,發送回車符和換行符,通知服務器以下不再有請求頭。

(4)請求數據
請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。

Http的狀態碼

HTTP碼應碼
響應碼由三位十進制數字組成,它們出現在由HTTP服務器發送的響應的第一行。

響應碼分五種類型,由它們的第一位數字表示:

1xx:信息,請求收到,繼續處理
2xx:成功,行爲被成功地接受、理解和採納
3xx:重定向,爲了完成請求,必須進一步執行的動作
4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現
5xx:服務器錯誤,服務器不能實現一種明顯無效的請求

Http request的8種類型

HTTP協議中共定義了八種方法或者叫“動作”來表明對Request-URI指定的資源的不同操作方式
1. OPTIONS:返回服務器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務器發送’*’的請求來測試服務器的功能性
2. HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息
3. GET:向特定的資源發出請求
4. POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的創建和/或已有資源的修改
5. PUT:向指定資源位置上傳其最新內容
6. DELETE:請求服務器刪除Request-URI所標識的資源
7. TRACE:回顯服務器收到的請求,主要用於測試或診斷
8. CONNECT:HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器

雖然HTTP的請求方式有8種,但是我們在實際應用中常用的也就是get和post

Http的長連接和短連接

短連接
連接->傳輸數據->關閉連接
HTTP是無狀態的,瀏覽器和服務器每進行一次HTTP操作,就建立一次連接,但任務結束就中斷連接。
也可以這樣說:短連接是指SOCKET連接後發送後接收完數據後馬上斷開連接。

長連接
連接->傳輸數據->保持連接 -> 傳輸數據-> … ->關閉連接
長連接指建立SOCKET連接後不管是否使用都保持連接,但安全性較差

HTTP也可以建立長連接的,使用Connection:keep-alive,HTTP 1.1默認進行持久連接
HTTP的長連接和短連接本質上是TCP長連接和短連接。HTTP屬於應用層協議,在傳輸層使用TCP協議,在網絡層使用IP協議。實現長連接要客戶端和服務端都支持長連接

長連接多用於操作頻繁,點對點的通訊,而且連接數不能太多情況。每個TCP連接都需要三步握手,這需要時間,如果每個操作都是先連接,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接發送數據包就OK了,不用建立TCP連接。例如:數據庫的連接用長連接,WEB網站的http服務一般都用短鏈接,因爲長連接對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連接用短連接會更省一些資源

Cookie與Session的作用與原理

Cookie 用於保存客戶瀏覽器請求服務器頁面的請求信息,也可以用它存放非敏感性的用戶信息,信息保存的時間可以根據需要設置.如果沒有設置Cookie失效日期,它們僅保存到關閉瀏覽器程序爲止.如果將Cookie對象的Expires屬性設置爲Minvalue,則表示Cookie永遠不會過期.Cookie存儲的數據量很受限制,大多數瀏覽器支持最大容量爲4K,因此不要用來保存數據集及其他大量數據.由於並非所有的瀏覽器都支持Cookie,並且數據信息是以明文文本的形式保存在客戶端的計算機中,因此最好不要保存敏感的,未加密的數據,否則會影響網站的安全性

Session用於保存每個用戶的專用信息. 每個客戶端用戶訪問時,服務器都爲每個用戶分配一個唯一的會話ID(Session ID) . 生存期是用戶持續請求時間再加上一段時間(一般是20分鐘左右).Session中的信息保存在Web服務器內容中,保存的數據量可大可小.當 Session超時或被關閉時將自動釋放保存的數據信息.由於用戶停止使用應用程序後它仍然在內存中保持一段時間,因此使用Session對象使保存用戶數據的方法效率很低.對於小量的數據,使用Session對象保存還是一個不錯的選擇

Http和Https的區別

HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議。它是一個安全通信通道,它基於HTTP開發,用於在客戶計算機和服務器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。

區別:
1. https協議需要到ca申請證書,一般免費證書很少,需要交費
2. Http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議
3. Http和Https使用的是完全不同的連接方式用的端口也不一樣,前者是80,後者是443
4. Http的連接很簡單,是無狀態的
5. HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議 要比http協議安全

http://www.ruanyifeng.com/blog/2011/02/seven_myths_about_https.html

ICMP和Ping以及traceroute

網際控制報文協議ICMP,目的在於更加有效的轉發IP數據報和提高交付成功的機會,該協議允許主機和路由器之間報告差錯以及提供差錯有關的異常情況的報告。

ICMP報文作爲IP層數據報的數據,加上數據報的首部之後,組成IP數據報發送。主要有兩種類型:ICMP差錯報告報文和ICMP詢問報文。
其中差錯報告報文有5種類型:終點不可達(給定的報文無法送達,向源點發送一個不可達ICMP報文),源點抑制(網絡出現擁塞的時候,主機或路由器向源點發送數據抑制報文),超時(路由器收到生存時間爲0的報文,丟棄並向源點發送超時ICMP報文),參數問題(路由器或者主機收到的數據報的首部數據有問題,向源點發送參數出錯報文),改變路由(一般用於調整數據的路由路徑);
詢問報文分兩種:回送請求或回答報文(主機或路由器給特定主機發送詢問報文,目的主機在接受到之後必須發送ICMP回答報文,主要用於探測目的站的可達性和了解狀態),時間戳請求或回答報文(用於請求某個主機或者路由器回答當前時間,用於時間測量或者時鐘同步)。

ICMP的兩個應用分別是Ping和traceroute
Ping用於探測兩個主機之間的連通性,ping屬於直接從應用層直接使用了網絡層的ICMP,而跳過了傳輸層的TCP/UDP。主機發送ping命令之後,就會連續向目標機發送4個ICMP回送請求報文。目標機收到回送請求報文之後會迴應相應的ICMP報文,然後就可以通過四個回答報文得出往返時間以及丟包率。

traceroute(win下是tracert):從源主機發送一串IP數據報,其中的數據部分封裝的是無法交付的UDP數據,並且,這一連串的IP數據報的TTL依次被設置爲1, 2 , 3…。第一個數據報發出之後達到第一個路由r1,r1將TTL減1之後發現爲0,丟棄並返回一個ICMP超時報文,接着是第二個TTL=2的報文,此時路徑中路由器數目增加了一個…一直持續到報文被髮送到目標主機,目標主機發現數據報無法交付,就給源主機回送了一個終點不可達的ICMP報文。至此,trace結束,源主機就得到了到目標主機的一條路由路徑,以及相鄰兩個路由之間的往返時間。

電腦上訪問一個網頁的整個過程

域名解析 –> 發起TCP的3次握手 –> 建立TCP連接後發起http請求 –> 服務器響應http請求,瀏覽器得到html代碼 –> 瀏覽器解析html代碼,並請求html代碼中的資源(如js、css、圖片等) –> 瀏覽器對頁面進行渲染呈現給用戶

一次完整的HTTP事務:
http://www.linux178.com/web/httprequest.html
也可以參考這個經典面試題,中間部分即是:
http://www.open-open.com/lib/view/open1426238767404.html

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