http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟:
(1) 建立tcp連線
在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建internet,即著名的tcp/ip協議族,因此internet又被稱作是tcp/ip網路。http是比tcp更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立tcp連線,一般tcp連線的埠號是80
(2) web瀏覽器向web伺服器傳送請求命令
一旦建立了tcp連線,web瀏覽器就會向web伺服器傳送請求命令
例如:get/sample/hello.jsp http/1.1
(3) web瀏覽器傳送請求頭資訊
瀏覽器傳送其請求命令之後,還要以頭資訊的形式向web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。
(4) web伺服器應答
客戶機向伺服器發出請求後,伺服器會客戶機回送應答,
應答的第一部分是協議的版本號和應答狀態碼
(5) web伺服器傳送應答頭資訊
正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。
(6) web伺服器向瀏覽器傳送資料
web伺服器向瀏覽器傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以content-type應答頭資訊所描述的格式傳送使用者所請求的實際資料
(7) web伺服器關閉tcp連線
一般情況下,一旦web伺服器向瀏覽器傳送了請求資料,它就要關閉tcp連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行**
connection:keep-alive
tcp連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。
http請求格式
當瀏覽器向web伺服器發出請求時,它向伺服器傳遞了乙個資料塊,也就是請求資訊,http請求資訊由3部分組成:
下面是乙個http請求的例子:
get /sample.jsp http/1.1 ------------請求行
accept:image/gif.image/jpeg,*/* -------藍色部分是請求頭
accept-language:zh-cn
connection:keep-alive
host:localhost
user-agent:mozila/4.0(compatible;msie5.01;window nt5.0)
accept-encoding:gzip,deflate
(空行)
username=jinqiao&password=1234 ------請求正文
(1)請求方法uri協議/版本
請求的第一行是「方法url議/版本」:get/sample.jsp http/1.1
以上**中「get」代表請求方法,「/sample.jsp」表示uri,「http/1.1代表協議和協議的版本。
根據http標準,http請求可以使用多種請求方法。例如:http1.1支援7種請求方法:get、post、head、options、put、delete和tarce。在internet應用中,最常用的方法是get和post。
url完整地指定了要訪問的網路資源,通常只要給出相對於伺服器的根目錄的相對目錄即可,因此總是以「/」開頭,最後,協議版本宣告了通訊過程中使用http的版本。
(2)請求頭(request header)
請求頭包含許多有關的客戶端環境和請求正文的有用資訊。例如,請求頭可以宣告瀏覽器所用的語言,請求正文的長度等。
accept:image/gif.image/jpeg.*/*
accept-language:zh-cn
connection:keep-alive
host:localhost
user-agent:mozila/4.0(compatible:msie5.01:windows nt5.0)
accept-encoding:gzip,deflate.
(3) 請求正文
請求頭和請求正文之間是乙個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字串資訊:
username=jinqiao&password=1234
在以上的例子的http請求中,請求的正文只有一行內容。當然,在實際應用中,http請求正文可以包含更多的內容。
http請求方法我這裡只討論get方法與post方法
get方法是預設的http請求方法,我們日常用get方法來提交表單資料,然而用get方法提交的表單資料只經過了簡單的編碼,同時它將作為url的一部分向web伺服器傳送,因此,如果使用get方法來提交表單資料就存在著安全隱患上。例如
從上面的url請求中,很容易就可以辯認出表單提交的內容。(?之後的內容)另外由於get方法提交的資料是作為url請求的一部分所以提交的資料量不能太大
post方法是get方法的乙個替代方法,它主要是向web伺服器提交表單資料,尤其是大批量的資料。post方法克服了get方法的一些缺點。通過post方法提交表單資料時,資料不是作為url請求的一部分而是作為標準資料傳送給web伺服器,這就克服了get方法中的資訊無法保密和資料量太小的缺點。因此,出於安全的考慮以及對使用者隱私的尊重,通常表單提交時採用post方法。
從程式設計的角度來講,如果使用者通過get方法提交資料,則資料存放在query_string環境變數中,而post方法提交的資料則可以從標準輸入流中獲取。
http應答與http請求相似,http響應也由3個部分構成,分別是:
下面是乙個http響應的例子:
server:apache tomcat/5.0.12
date:mon,6oct2003 13:23:42 gmt
content-length:112
協議狀態**描述http響應的第一行類似於http請求的第一行,它表示通訊所用的協議是http1.1伺服器已經成功的處理了客戶端發出的請求(200表示成功):
響應頭(response header)響應頭也和請求頭一樣包含許多有用的資訊,例如伺服器型別、日期時間、內容型別和長度等:
server:apache tomcat/5.0.12
date:mon,6oct2003 13:13:33 gmt
content-type:text/html
last-moified:mon,6 oct 2003 13:23:42 gmt
content-length:112
響應正文響應正文就是伺服器返回的html頁面:
響應頭和正文之間也必須用空行分隔。
l http應答碼
http應答碼也稱為狀態碼,它反映了web伺服器處理http請求狀態。http應答碼由3位數字構成,其中首位數字定義了應答碼的型別:
1xx-資訊類(information),表示收到web瀏覽器請求,正在進一步的處理中
2xx-成功類(successful),表示使用者請求被正確接收,理解和處理例如:200 ok
3xx-重定向類(redirection),表示請求沒有成功,客戶必須採取進一步的動作。
4xx-客戶端錯誤(client error),表示客戶端提交的請求有錯誤 例如:404 not
found,意味著請求中所引用的文件不存在。
5xx-伺服器錯誤(server error)表示伺服器不能完成對請求的處理:如 500
對於我們web開發人員來說掌握http應答碼有助於提高web應用程式除錯的效率和準確性。
安全連線
web應用最常見的用途之一是電子商務,可以利用web伺服器端程式使人們能夠網路購物,需要指出一點是,預設情況下,通過internet傳送資訊是不安全的,如果某人碰巧截獲了你發給朋友的一則訊息,他就能開啟它,假想在裡面有你的信用卡號碼,這會有多麼糟糕,幸運的是,很多web伺服器以及web瀏覽器都有創立安全連線的能力,這樣它們就可以安全的通訊了。
通過internet提供安全連線最常見的標準是安全套接層(secure sockets layer,ssl)協議。ssl協議是乙個應用層協議(和http一樣),用於安全方式在web上交換資料,ssl使用公開金鑰編碼系統。從本質講,這意味著業務中每一方都擁有乙個公開的和乙個私有的金鑰。當一方使用另一方公開金鑰進行編碼時,只有擁有匹配金鑰的人才能對其解碼。簡單來講,公開金鑰編碼提供了一種用於在兩方之間交換資料的安全方法,ssl連線建立之後,客戶和伺服器都交換公開金鑰,並在進行業務聯絡之前進行驗證,一旦雙方的金鑰都通過驗證,就可以安全地交換資料。
apache2中,可使用limit,limitexcept進行訪問控制的方法包括:get
,post
,put
,delete
,connect
,options
,patch
,propfind
,proppatch
,mkcol
,copy
,move
,lock
, 和unlock
.
其中, head get post options propfind是和讀取相關的方法,mkcol put delete lock unlock copy move proppatch是和修改相關的方法
HTTP認證機制
http請求報頭 authorization http響應報頭 www authenticate http認證 基於 質詢 回應 challenge response 的認證模式。基本認證 basic authentication http1.0提出的認證方法 客戶端對於每乙個realm,通過提供使...
Http快取機制
快取快取,就是把需要的東西存起來,不需要每次都去請求。主要目的減小伺服器壓力,放到客戶端上來講,還利於節省流量,還能流暢的把ui顯示出來,提高了使用者體驗。對於http快取來講,主要的就是校驗快取的有效性,也就是新鮮度。如果客戶端不能及時響應服務端的資料變化,快取一直不能被更新,那不就是得不償失了?...
HTTP 快取機制
基於 header的示例 content length 3534http快取策略分為 1 快取策略 cache control 頭里的 public private no cache max age no store 其中no store為不儲存,no cache 0秒的max age 2 快取過期...