小結:
1. HTTP協議是無狀態的
http協議是無狀態的,同一個用戶端的這次請求和上次請求是沒有對應關係,對http伺服器來說,它並不知道這兩個請求來自同一個用戶端。
2. HTTP訊息的結構
A.Request訊息的結構, Request訊息分為3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. 注意:header和body之間有個空行
B.Response訊息的結構,和Request訊息的結構基本一樣。同樣也分為三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. 注意:header和body之間也有個空行
3. Get和Post方法的區別
Http協議定義了很多與伺服器互動的方法,最基本的有4種,分別是GET,POST,PUT,DELETE。 一個URL地址用於描述一個網路上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了. GET一般用於擷取/查詢資源資訊,而POST一般用於更新資源資訊.
4. GET和POST的區別
a. GET提交的資料會放在URL之後,以?分割URL和傳輸資料,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的Body中.
b. GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.
c. GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來擷取變數的值。
d. GET方式提交資料,會帶來安全問題,比如一個登入頁面,通過GET方式提交資料時,使用者名稱和密碼將出現在URL上,如果頁面可以被緩衝或者其他人可以訪問這台機器,就可以從記錄獲得該使用者的帳號和密碼.
5. Request Head 內容:
(1) Cache 頭域
a. If-Modified-Since
作用: 把瀏覽器端快取頁面面的最後修改時間發送到伺服器去,伺服器會把這個時間與伺服器上實際檔案的最後修改時間進行對比。如果時間一致,那麼返回304,用戶端就直接使用本機快取檔案。如果時間不一致,就會返回200和新的檔案內容。用戶端接到之後,會丟棄舊檔案,把新檔案快取起來,並顯示在瀏覽器中.
b. If-None-Match
作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag資訊。 當使用者再次請求該資源時,將在HTTP Request 中加入If-None-Match資訊(ETag的值)。如果伺服器驗證資源的ETag沒有改變[如果Request中的If-None-Match的值和Response中的ETag值一樣,說明檔案沒有更新,伺服器將返回304,告訴用戶端使用本機快取檔案],將返回一個304狀態告訴用戶端使用本機快取檔案。否則將返回200狀態和新的資源和Etag. 使用這樣的機制將提高網站的效能
c. Pragma
作用: 防止頁面被緩衝, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一樣, Pargma只有一個用法,例如:Pragma: no-cache
d. Cache-Control
作用: 這個是非常重要的規則。 這個用來指定Response-Request遵循的緩衝機制。各個指令含義如下
Cache-Control:Public 可以被任何緩衝所緩衝
Cache-Control:Private 內容只緩衝到私人緩衝中
Cache-Control:no-cache 所有內容都不會被緩衝
(2) Client 頭域
a. Accept
作用: 瀏覽器端可以接受的媒體類型,
例如: Accept: text/html 代表瀏覽器可以接受伺服器回傳的類型為 text/html 也就是我們常說的html文檔,
如果伺服器無法返回text/html類型的資料,伺服器應該返回一個406錯誤(non acceptable)
萬用字元 * 代表任意類型
例如 Accept: */* 代表瀏覽器可以處理所有類型,(一般瀏覽器發給伺服器都是發這個)
b. Accept-Encoding:
作用:瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支援壓縮,支援什麼壓縮方法(gzip,deflate)
例如: Accept-Encoding: gzip, deflate
c. Accept-Language
作用: 瀏覽器申明自己接收的語言。
語言跟字元集的區別:中文是語言,中文有多種字元集,比如big5,gb2312,gbk等等;
例如:Accept-Language: en-us
d. User-Agent
作用:告訴HTTP伺服器, 用戶端使用的作業系統和瀏覽器的名稱和版本.
我們上網登陸論壇的時候,往往會看到一些歡迎資訊,其中列出了你的作業系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,服務 器應用程式就是從User-Agent這個請求前序域中擷取到這些資訊User-Agent請求前序域允許用戶端將它的作業系統、瀏覽器和其它屬性告訴伺服器。
例如:
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
e. Accept-Charset
作用:瀏覽器申明自己接收的字元集
(3) Cookie/Login 頭域
Cookie: 作用: 最重要的header, 將cookie的值發送給HTTP 伺服器
(4) Entity頭域
a. Content-Length 作用:發送給HTTP伺服器資料的長度。
例如: Content-Length: 38
b. Content-Type
(5) Miscellaneous 頭域
Referer: 作用: 提供了Request的上下文資訊的伺服器,告訴伺服器我是從哪個連結過來的,比如從我首頁上連結到一個朋友那裡,他的伺服器就能夠從HTTP Referer中統計出每天有多少使用者點擊我首頁上的連結訪問他的網站。
例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT
(6) Transport 頭域
a. Connection: keep-alive 當一個網頁開啟完成後,用戶端和伺服器之間用於傳輸HTTP資料的TCP串連不會關閉,如果用戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的串連
b. Connection: close 代表一個Request完成後,用戶端和伺服器之間用於傳輸HTTP資料的TCP串連會關閉, 當用戶端再次發送Request,需要重建立立TCP串連。
c. Host(發送請求時,該前序域是必需的)
作用: 請求前序域主要用於指定被請求資源的Internet主機和連接埠號碼,它通常從HTTP URL中提取出來的
6. Response Head 內容:
(1) Cache頭域
a. Date
作用: 產生訊息的具體時間和日期
例如: Date: Sat, 11 Feb 2012 11:35:14 GMT
b. Expires
作用: 瀏覽器會在指定到期時間內使用本機快取
例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT
(2) Cookie/Login 頭域
a. P3P
作用: 用於跨網域設定Cookie, 這樣可以解決iframe跨域訪問cookie的問題
b.Set-Cookie
作用: 非常重要的header, 用於把cookie發送到用戶端瀏覽器,每一個寫入cookie都會產生一個Set-Cookie.
(3) Entity頭域
a. ETag
作用: 和Request header中的If-None-Match 配合使用。
例如: ETag: "03f2b33c0bfcc1:0"
b. Last-Modified:
作用: 用於指示資源的最後修改日期和時間
例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT
c. Content-Type
作用:WEB伺服器告訴瀏覽器自己響應的對象的類型和字元集,
例如:
Content-Type: text/html; charset=utf-8
Content-Type:text/html;charset=GB2312
Content-Type: image/jpeg
d. Content-Length
指明實體本文的長度,以位元組方式儲存的十進位數字來表示。在資料下行的過程中,Content-Length的方式要預先在伺服器中緩衝所有資料,然後所有資料再一股腦兒地發給用戶端。
例如: Content-Length: 19847
e. Content-Encoding
WEB伺服器表明自己使用了什麼壓縮方法(gzip,deflate)壓縮響應中的對象。
例如:Content-Encoding:gzip
f. Content-Language
作用: WEB伺服器告訴瀏覽器自己響應的對象的語言
例如: Content-Language:da
(4) Miscellaneous 頭域
a. Server:
作用:指明HTTP伺服器的軟體資訊
例如:Server: Microsoft-IIS/7.5
b. X-AspNet-Version:
作用:如果網站是用ASP.NET開發的,這個header用來表示ASP.NET的版本
例如: X-AspNet-Version: 4.0.30319
c. X-Powered-By:
作用:表示網站是用什麼技術開發的
例如: X-Powered-By: ASP.NET
(5) Location頭域
Location
作用: 用於重新導向一個新的位置, 包含新的URL地址
7. HTTP協議是無狀態的和Connection: keep-alive的區別
無狀態是指協議對於交易處理沒有記憶能力,伺服器不知道用戶端是什麼狀態。從另一方面講,開啟一個伺服器上的網頁和你之前開啟這個伺服器上的網頁之間沒有任何聯絡
HTTP是一個無狀態的連線導向的協議,無狀態不代表HTTP不能保持TCP串連,更不能代表HTTP使用的是UDP協議(無串連);
從HTTP/1.1起,預設都開啟了Keep-Alive,保持串連特性,簡單地說,當一個網頁開啟完成後,用戶端和伺服器之間用於傳輸HTTP資料的TCP串連不會關閉,如果用戶端再次訪問這個伺服器上的網頁,會繼續使用這一條已經建立的串連Keep-Alive不會永久保持串連,它有一個保持時間,可以在不同的伺服器軟體(如Apache)中設定這個時間.