文章出處
HTTP數據傳輸協議
當訪問一個網頁時,瀏覽器會向服務器發起一條HTTP請求,接著服務器會去尋找相應的資源,如果請求成功,就會把這個對象,對象類型,對象長度以及其他的信息放在HTTP響應中,發送給客戶端。
因為資源種類太多,所以WEB服務器在返回響應時會為HTTP對象附加一條MIME類型(數據類型),當瀏覽器接收到數據時,會去查看這個MIME類型,然后會根據這個類型去渲染它(前提這個瀏覽器支持這種類型,否則瀏覽器會通過其他方式,這個沒有一個固定的形式)。
MIME類型由兩部分組成:
主要類型 / 具體類型
Image/jpeg
如:
人 / 男或女
HTTP 協議入門:http://www.ruanyifeng.com/blog/2016/08/http.html
MIME type還可以在尾部使用分號,添加參數。
Content-Type: text/html; charset=utf-8
客戶端請求的時候,可以使用Accept字段聲明自己可以接受哪些數據格式。
Accept: */*
上面代碼中,客戶端聲明自己可以接受任何格式的數據。
Content-Encoding 字段
由于發送的數據可以是任何格式,因此可以把數據壓縮后再發送。Content-Encoding字段說明數據的壓縮方法。
Content-Encoding: gzip
客戶端在請求時,用Accept-Encoding字段說明自己可以接受哪些壓縮方法。
Accept-Encoding: gzip, deflate
Referer
表示這個請求是從哪個URL過來的。
用途1:獲取用戶是從哪個網站跳轉到你主頁的。
用途2:推薦注冊應該也是通過這個實現的。(我猜的)
Cache-Control
對緩存進行控制,如一個請求希望響應返回的內容在客戶端要被緩存一年,或不希望被緩存就可以通過這個報文頭達到目的。
由HTTP引發的性能問題
服務器只有處理完上一個回應,才會進行下一個回應。要是前面的回應特別慢,后面就會有許多請求排隊等著。
為了避免這個問題,只有兩種方法:一是減少請求數,二是同時多開持久連接。這導致了很多的網頁優化技巧,比如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等等。
統一資源標識符URI
資源標識符分為兩種類型分別是:URL和URN,也就是說URL和URN都是URI的子集。
URL(統一資源定位符)
URL詳細的說明了某個資源的位置以及如何去訪問它。
URL是URI的一種,不僅標識了Web 資源,還指定了操作或者獲取方式,同時指出了主要訪問機制和網絡位置。
URL包括3部分:
1.訪問資源所使用的協議類型 如: http:// 或 https://
2.服務器地址
3.服務器上具體的文件路徑
URN(統一資源名)
用來標識一個實體名字,它并不關心這個資源的具體位置。
URN是URI的一種,用特定命名空間的名字標識資源。使用URN可以在不知道其網絡位置及訪問方式的情況下討論資源。
百度云離線下載就是使用的URN:以及這個http://www.xuexila.com/fangfa/1115853.html
URN可以用來實現磁力鏈接 http://www.tuicool.com/articles/Z36nauv
URL,URN,URI它們之間的區別:http://web.jobbole.com/83452/
HTTP請求方法
方法是用來告訴服務器做什么事情的,狀態碼則用來告訴客戶端,發生了什么事情。
常見HTTP方法
GET:從服務器獲取資源
POST:把發送數據到服務器
PUT:將客戶端數據存儲到服務器中
DELETE:從服務器中刪除數據
HEAD:將資源發送到HTTP首部
狀態碼
每條HTTP響應報文返回時都會攜帶一個狀態碼,這個狀態碼由3位數字組成,他告訴客戶端請求是否成功,或是否需要采取其他動作,另外它還會附帶一條解釋性的短語用來描述這個響應結果。
100 - 199 信息提示
200 - 299 成功
300 - 399 重定向
400 - 499 客戶端錯誤
500 - 599 服務器錯誤
報文
從客戶端發往服務器端的HTTP報文稱為請求報文,從服務器端發往客戶端的報文稱為響應報文。
HTTP報文包括以下3部分
起始行:
在請求報文中說明要干什么,在響應報文中說明出現了什么情況。
首部字段:
首部字段可以包含0個或多個,每個字段包含一個名字以及相應的值它們用 :來分割,每個字段為一行。
主體:
請求主體包括了要發送給服務器的數據,響應主體裝載了要返回給客戶端的數據,主體可以是普通的文本也可以是二進制數據,另外請求主體是可選的。
傳輸協議TCP/IP
TCP提供了:無差錯的數據傳輸,數據按發送的順序到達,可以任意時刻把數據發送出去。
在HTTP客戶端向服務器發送報文之前,需要用網際協議地址和端口號在客戶端和服務器之間建立一條TCP/IP連接。
IP地址和端口號通過URL上獲取,如果URL上使用的是主機名形式,那么瀏覽器會通過DNS來將對應的域名解析成IP地址,如果URL上沒有提供端口號,那么默認為80端,數據庫默認端口為3306。
步驟如下:
1.瀏覽器從URL中解析出服務器的主機名
2.將主機名轉換成IP地址
3.將URL中的端口號解析出來,沒有的話默認80
4.建立TCP連接
5.瀏覽器向服務器發送一條HTTP請求
6.服務器響應客戶端報文
7.關閉連接,瀏覽器解析響應內容。
HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系。
Cookie和Session它們都是為了解決HTTP無狀態的問題而所做的努力。
HTTP報文詳解:http://www.iteye.com/topic/1124408
HTTP協議:http://www.cnblogs.com/xiguain/category/600996.html





