20061007的課堂筆記
Web瀏覽器
-->代理服務器
-->Web服務器
在Web瀏覽器與代理服務器的關係中,代理服務器充當Web瀏覽器的服務器,
而在Web服務器與代理服務器的關係中,代理服務器充當客戶端的角色,
請求消息結構
一個請求行,多個消息頭,和實體內容
GET /Books/java.html HTTP/1.1
Accept: */*
Accept_Language: en-us
……
<空行>
響應消息的結構
一個狀態行多個消息頭,和實體內容.消息頭跟實體內容要用空行分開
Http/1.1 200 OK
Server:Microsoft-IIS/5.0
Date: thu, 13….
Content-Length:2299
Content-TYPE:text/html
Cache-control:private
<空行>
/實體內容
可以通過判但瀏覽器(以後可能會有手機來訪問)來發送不同的內容
現在流行用CSS來實現不同的網頁顯示效果.
Html的內容一樣,而就是靠CSS來改變外觀
消息頭及其作用
使用消息頭可以實現HTTP客戶機與服務器之間的條件請求跟應答.消息頭相當於服務器和瀏覽器之間的一些暗號指令
消息頭包含自段名稱,然後是茂號,控格,值回車跟換行福
消息頭不區分大小寫,但習慣首字母大寫
消息頭不分排列順序
可以分為通用消息頭,請求頭,響應頭,實體頭.
值之間可以用鬥號分割多個值
請求行:
請求方式 資源路徑
HTTP版本號<回車換行/r/n>
如: GET /test.html HTTP/1.1
如: GET /test.html HTTP/1.1
GET /test.html?param1=value1¶m2=value2
請求方式有:GET POST HEAD OPTIONS DELETE TRACE PUT
常用只有GET/POST,其他的都不太用
常用只有GET/POST,其他的都不太用
跟狀態行:
HTTP版本號 狀態馬 原因敘述<回車換行/r/n>
HTTP/1.1 200 OK
URL的參數:
http://www.kiyoharaTakuya.co.jp/ index.html?param1=value1¶m2=value2&……
注意,GET中船參數長度最大為1K
GET /index.html¶m1=value1¶m2=value2&……
POST傳參數的話是放在請求消息的實體內容中
如:
POST /index.html HTTP/1.1
HOST:
Content-TYPE: application/x-www-form-urlencoded
Content-Length: 28 //注意,太短會把實體內容截斷,太長會繼續等待內容而卡住
Param1=value1¶m2=value2
參數可以使用Get/POST來傳參數而對服務器來說都無所謂,都可以取得
千萬不要指望JAVASCRPIT來進行安全防護,因為用戶可以把網頁另存,去掉JAVASCRPIT的代碼然後再連到服務器上就能夠避開JAVASCRIPT的驗證了,所以只能有友好提示作用
GET是查詢服務器的資料,而POST是修改服務器中的數據時用的
使用<image>時可以把SRC指向一個jsp等的文件來動態生成圖片.而不限於只讀取硬碟上的文件.然而圖片常常會被瀏覽器緩存,所以動態圖片應該不要緩存(no-cache)
通用消息頭
Cache-Control: (no-cache)
//當作為請求頭時,通知客戶機和服務器之間的代理服務器如何時用以緩存的頁面
//作為響應時,通知客戶或代理服務器如何緩存傳過去的資源
//當作為請求頭時,通知客戶機和服務器之間的代理服務器如何時用以緩存的頁面
//作為響應時,通知客戶或代理服務器如何緩存傳過去的資源
Connection
(close,keep-alive) HTTP1.1默認keep-alive
//當處理完本次請求響應後,客戶端跟服務器間是否要保持連接.
Date
( Tue,11 Jul 2000 18:23:51 GMT)
表示HTTP消息產生時間.服務器返回的通常有此自段
Pragma (no-cache)
//HTTP1.0表示客戶端不要緩存.在HTTP1.1時用control-cache來指定.
Trailer
Transfer-Encoding
//chunked
將大批資料分部份傳輸,每次的傳輸又有包含這批傳輸的大小
請求頭
Accept : text/html, image/*
Accept-Charset
Accept-Encoding (gzip,compress)壓縮方式
Accept-Language: ( … en-gb,zh-cn )
Authorization:(一般用basic驗證方式.格式 [用戶名]:[密碼]
à編碼後傳給服務器.容易被解碼)
Expect:
From
Host
if-Modified-Since
Range (bytes=[from]-[to] bytes=[from]-
bytes=-[最後的第幾個字節內容])包括兩個界線值
Referer: 連接來源
User-Agent
響應頭
location
Accept-Range
Age
Etag
Server
WWW-Authenticate
實體頭
Alow: GET,POST
Connect-Encoding: gzip //壓縮方式
Content-Language: zh-cn
Contect-Length: 80
//
Contect-Range:
Content-Type : text/html; charset=GB2312
Expires: (日期:Tue,11 Jul 2000 12:12:12 GMT) //設為則立刻表示無效
Last-Modified: (日期)
擴展頭
(HTTP1.1沒有定義的頭.可以是自定義的HTTP頭.他們常被作為一種實體頭處理)
現在流行的IE都支持Cookie,set-cookie,refresh,跟Content-Disposition等常用字段
Refresh 過多少秒來從新刷新
Refresh:20 //20秒.
Refresh:20;url=http://www.it315.org
Content-Disposition
Content-Type: MIME TYPE //必備
Content-Disposition: attachment: filename=aaa.zip
防止緩存通常三道防線: Control-cache,Pragma , expire三個.
為什麼要有Content-length呢?因為一個連接有多個請求,若不知道length的話,他不知道哪些資料是第一個請求的,哪些資料是第二個請求的,那就靠length(可以發線每次傳回來時用十六禁制來顯示這次傳輸的大小)來區分