javaweb之http協議

 先把昨天剩餘的一點知識補上,打包web應用war

C:/new>jar -cvf news.war *.*/ .;

代表在c盤下的javaweb應用news文件,打包成war,擴展名是war;把這個news目錄下的所有文件和他下面的文件夾的內容都打到war包裏,最後一點代表打包到當前文件夾;

這個僅適於文件夾過大,在運行tomcat程序時自動解包;挺方便的;

 

http://localhost:8080/主頁裏,Tomcat Manager代表創建一個管理員賬戶,需要在Apache-tomcat-6.0.18\conf裏的tomcat-users.xml文件里加入下列用戶名和密碼;

<role rolename="manager"/>

<user username="tomcat" password="tomcat" roles="manager"/>

這樣就可以打開管理了;爲了防止賬戶被盜,所以用完之後最好刪掉;

HTTP簡介

客戶端連上web服務器後,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式。

WEB瀏覽器與WEB服務器之間的一問一答的交互過程必須遵循一定的規則,這個規則就是HTTP協議。

HTTPhypertext transfer protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議集中的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據的過程以及數據本身的格式。

HTTP協議的版本

HTTP/1.0HTTP/1.1

HTTP協議是學習JavaWEB開發的基石,不深入瞭解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些複雜的WEB站點。深入理解HTTP協議,對管理和維護複雜的WEB站點、開發具有特殊用途的WEB服務器程序具有直接影響。

 

http1.0的會話方式:

瀏覽器與WEB服務器的連接過程是短暫的,每次連接只處理一個請求和響應。對每一個頁面的訪問,瀏覽器與WEB服務器都要建立一次單獨的連接。

支持代理:有緩存;

 

瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。

 

HTTP 1.1的特點

在一個TCP連接上可以傳送多個HTTP請求和響應

多個請求和響應過程可以重疊進行

增加了更多的請求頭和響應頭

HTTP1.0HTTP1.1的區別

HTTP1.0協議中,客戶端與web服務器建立連接後,只能獲得一個web資源。

HTTP1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源。

使用telnet舉例說明。

首先在命令窗口輸入 telnet 主機名 端口號;

在輸入ctrl+],再按空格;GET /news/1.html HTTP/1.1 news代表javaweb應用,後面是裏面的html文件 和http版本;

如果不會用tenlnet或者用不了,請點擊我的博客裏的另一篇文章有專門介紹的;

安裝IE瀏覽器插件HttpWatch,查看IE瀏覽器通過HTTP協議獲取某個頁面。

 

安裝HttpWatch

HttpWatch工具的使用

功能:監聽和截獲本地機器每次向服務器發送的http請求數據和服務器向本地機器返回的http響應數據。

下載:http://www.httpwatch.com/

下載後,直接雙擊下載文件安裝即可。之後打開IE瀏覽器,選擇“工具”→“瀏覽器欄”→“HttpWatch Professional”。

這樣操作之後,就可以打開HttpWatch工具了。

 

一個web頁面中,使用img標籤引用了三幅圖片,當客戶端訪問服務器中的這個web頁面時,客戶端總共會訪問幾次服務器,即向服務器發送了幾次HTTP請求。

 

 

HTTP請求消息

客戶端連上服務器後,向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括如下內容:

一個請求行、若干消息頭、以及實體內容,

 

 

 

請求消息的結構:

一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。

舉例:

GET /books/java.html HTTP/1.1 //請求行

Accept: */*

Accept-Language: en-us

Connection: Keep-Alive

Host: localhost

Referer: http://localhost/links.asp

User-Agent: Mozilla/4.0

Accept-Encoding: gzip, deflate //多個消息頭

//一個空行

 

請求行用於描述客戶端的請求方式、請求的資源名稱,以及使用的HTTP協議版本號

消息頭用於描述客戶端請求哪臺主機,以及客戶端的一些環境信息等

 

請求行中的GET稱之爲請求方式,請求方式有:

POSTGETHEADOPTIONSDELETETRACEPUT

常用的有: GETPOST

用戶如沒有設置,默認情況下瀏覽器向服務器發送的都是get請求,例如在瀏覽器直接輸地址訪問,點超鏈接訪問等都是get,用戶如想把請求方式改爲post,可通過更改表單的提交方式實現。

不管POSTGET,都用於向服務器請求某個WEB資源,這兩種方式的區別主要表現在數據傳遞上:

如請求方式爲GET方式,則可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如:

GET /mail/1.html?name=abc&password=xyz HTTP/1.1

GET方式的特點:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K

如請求方式爲POST方式,則可以在請求的實體內容中向服務器發送數據,Post方式的特點:傳送的數據量無限制。

用於HTTP請求中的常用頭

Accept: text/html,p_w_picpath/*

Accept-Charset: ISO-8859-1

Accept-Encoding: gzip,compress

Accept-Language: en-us,zh-cn

Host: www.it315.org:80

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT

Referer: http://www.it315.org/index.jsp

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Cookie

Connection: close/Keep-Alive

Date: Tue, 11 Jul 2000 18:23:51 GMT

 

HTTP響應

一個HTTP響應代表服務器向客戶端回送的數據,它包括:

一個狀態行、若干消息頭、以及實體內容 。

 

 

 

 

舉例:

HTTP/1.1 200 OK //狀態行

 

Server: Microsoft-IIS/5.0

Date: Thu, 13 Jul 2000 05:46:53 GMT

Content-Length: 2291

Content-Type: text/html

Cache-control: private //多個消息頭

// 一個空行

<HTML> // 實體內容

<BODY>

……

1.狀態行用於描述服務器對請求的處理結果。

2.消息頭用於描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理等一會兒它回送的數據。

3.代表服務器向客戶端回送的數據

 

在一個HTTP響應中,WEB服務器通過響應頭向web客戶端描述客戶端的請求成功與否,以及它所發送的數據類型等一些信息,客戶端通過這些信息,進而可以知道如何對數據進行處理

 

狀態行

格式: HTTP版本號 狀態碼 原因敘述<CRLF>

舉例:HTTP/1.1 200 OK

狀態碼用於表示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼分爲5類,如下所示:

 

200(正常)

表示一切正常,返回的是正常請求結果。

302/307(臨時重定向)

指出被請求的文檔已被臨時移動到別處,此文檔的新的URLLocation響應頭中給出。

304(未修改)

表示客戶機緩存的版本是最新的,客戶機應該繼續使用它。

403(禁止)

服務器理解客戶端請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置所致。

404(找不到)

服務器上不存在客戶機所請求的資源。

500(內部服務器錯誤)

服務器端的CGIASPJSP等程序發生錯誤。

 

HTTP請求中的常用響應頭

Location: http://www.it315.org/index.jsp

Server:apache tomcat

Content-Encoding: gzip

Content-Length: 80

Content-Language: zh-cn

Content-Type: text/html; charset=GB2312

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT

Refresh: 1;url=http://www.it315.org

Content-Disposition: p_w_upload; filename=aaa.zip

Transfer-Encoding: chunked

Set-Cookie:SS=Q0=5Lb_nQ; path=/search

ETag: W/"7777-1242234904000"

Expires: -1

Cache-Control: no-cache

Pragma: no-cache

Connection: close/Keep-Alive

Date: Tue, 11 Jul 2000 18:23:51 GMT

帶顏色的代表常用的三個響應頭Expires0,1)、Cache-ControlPragma

HTTP消息中,也可以使用一些在HTTP 1.1正式規範裏沒有定義的頭字段,這些頭字段統稱爲自定義的HTTP頭或擴展頭,它們通常被當作是一種實體頭處理。

現在流行的瀏覽器實際上都支持CookieSet-CookieRefreshContent-Disposition等幾個常用的擴展頭字段。

Refresh頭字段

Refresh: 1

Refresh: 1;url=http://www.it315.org

Content-Disposition頭字段

Content-Type: application/octet-stream

Content-Disposition: p_w_upload; filename=aaa.zip

1.請按自己的理解簡述HTTP 1.1HTTP 1.0的區別。

HTTP1.0特點:他的每一次連接都是隻處理一個請求和響應,支持代理,瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。

HTTP1.1特點:在一個TCP連接上可以傳送多個HTTP請求和響應

多個請求和響應過程可以重疊進行

增加了更多的請求頭和響應頭

2.請描述HTTP請求消息和HTTP響應消息的組成結構,並各舉一例進行說明。

請求消息:

POST /aa/1.html HTTP/1.1 //請求行

Accept: text/html, application/xhtml+xml, */*

Referer: http://localhost:8080/aa/1.html

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: localhost:8080

Content-Length: 11

Connection: Keep-Alive

Cache-Control: no-cache //多個消息頭

//一個空行

響應消息:

HTTP/1.1 200 OK //響應行

Server: Apache-Coyote/1.1

ETag: W/"194-1350445441233"

Last-Modified: Wed, 17 Oct 2012 03:44:01 GMT

Content-Type: text/html

Content-Length: 194

Date: Wed, 17 Oct 2012 11:05:23 GMT //多個消息頭

//一個空行

11111111111111111111111111111111111111111111111111 // 實體內容

<img src="D:\aa\460.jpg" />

<form method="post">

<input type="text" name="username" />

<input type="submit" value="提交" />

</form>

 

3.瀏覽器分別在哪些情況下使用GET方式和POST方式訪問WEB服務器?如果瀏覽器傳遞給WEB服務器的參數內容超過1K,應該使用那種方式發送請求消息?

數據容量通常不能超過1K,安全性差的使用GET

數據容量超過1k,安全性好的可以使用POST

應該用POST

4.請描述200302304404500等響應狀態碼所表示的意義。

200 表示正常,返回正常結果;

302:表示臨時重定向,指出被要求的文檔已被臨時移動到別處

304:表示未修改,客戶機緩存的版本是最新的,客戶機應該繼續使用;

403:表示禁止,服務器理解客戶端請求,但拒絕處理;

404:表示找不到,服務器不存在客戶機所請求的資源;

500:內部服務器出錯;

5.請列舉三種禁止瀏覽器緩存的頭字段,並寫出相應的設置值。

1Expires: 0

2Cache-Control: no-cache

3Pragma: no-cache 這三個頭組合使用,讓瀏覽器不要緩存數據

 

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