1. 程式人生 > >HTTP以及SOAP協議詳解

HTTP以及SOAP協議詳解

引言                                        


HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經提出。 
HTTP協議的主要特點可概括如下: 
1.支援客戶/伺服器模式。 
2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的
程式規模小,因而通訊速度很快。 
3.靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。 
4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。 
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。



一、HTTP協議詳解之URL篇 

    http(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連線方式,HTTP1.1版本中給出一種持續連線的機制,絕大多數的
Web開發,都是構建在HTTP協議之上的Web應用。 

HTTP URL (URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊)的格式如下: 
http://host[":"port][abs_path] 
http表示要通過HTTP協議來定位網路資源;host表示合法的Internet主機域名或者IP地址;port指定一個埠號,為空則使用預設埠80;abs_path指定請求資源的URI;如果URL中沒有給出abs_path,那麼當它作為請求URI時,必須以“/”的形式給出,通常這個工作瀏覽器自動幫我們完成。 
eg: 
1、輸入:www.guet.edu.cn
瀏覽器自動轉換成:http://www.guet.edu.cn/

2、http:192.168.0.116:8080/index.jsp 



二、HTTP協議詳解之請求篇 

    http請求由三部分組成,分別是:請求行、訊息報頭、請求正文 

1、請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本,格式如下:Method Request-URI HTTP-Version CRLF  
其中 Method表示請求方法;Request-URI是一個統一資源識別符號;HTTP-Version表示請求的HTTP協議版本;CRLF表示回車和換行(除了作為結尾的CRLF外,不允許出現單獨的CR或LF字元)。 

請求方法(所有方法全為大寫)有多種,各個方法的解釋如下: 
GET     請求獲取Request-URI所標識的資源 
POST    在Request-URI所標識的資源後附加新的資料 
HEAD    請求獲取由Request-URI所標識的資源的響應訊息報頭 
PUT     請求伺服器儲存一個資源,並用Request-URI作為其標識 
DELETE  請求伺服器刪除Request-URI所標識的資源 
TRACE   請求伺服器回送收到的請求資訊,主要用於測試或診斷 
CONNECT 保留將來使用 
OPTIONS 請求查詢伺服器的效能,或者查詢與資源相關的選項和需求 
應用舉例: 
GET方法:在瀏覽器的位址列中輸入網址的方式訪問網頁時,瀏覽器採用GET方法向伺服器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF) 

POST方法要求被請求伺服器接受附在請求後面的資料,常用於提交表單。 
eg:POST /reg.jsp HTTP/ (CRLF) 
Accept:image/gif,image/x-xbit,... (CRLF) 
... 
HOST:www.guet.edu.cn (CRLF) 
Content-Length:22 (CRLF) 
Connection:Keep-Alive (CRLF) 
Cache-Control:no-cache (CRLF) 
(CRLF)         //該CRLF表示訊息報頭已經結束,在此之前為訊息報頭 
user=jeffrey&pwd=1234  //此行以下為提交的資料 

HEAD方法與GET方法幾乎是一樣的,對於HEAD請求的迴應部分來說,它的HTTP頭部中包含的資訊與通過GET請求所得到的資訊是相同的。利用這個方法,不必傳輸整個資源內容,就可以得到Request-URI所標識的資源的資訊。該方法常用於測試超連結的有效性,是否可以訪問,以及最近是否更新。 
2、請求報頭後述 
3、請求正文(略) 



三、HTTP協議詳解之響應篇 

    在接收和解釋請求訊息後,伺服器返回一個HTTP響應訊息。 

HTTP響應也是由三個部分組成,分別是:狀態行、訊息報頭、響應正文 
1、狀態行格式如下: 
HTTP-Version Status-Code Reason-Phrase CRLF 
其中,HTTP-Version表示伺服器HTTP協議的版本;Status-Code表示伺服器發回的響應狀態程式碼;Reason-Phrase表示狀態程式碼的文字描述。 
狀態程式碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值: 
1xx:指示資訊--表示請求已接收,繼續處理 
2xx:成功--表示請求已被成功接收、理解、接受 
3xx:重定向--要完成請求必須進行更進一步的操作 
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現 
5xx:伺服器端錯誤--伺服器未能實現合法的請求 
常見狀態程式碼、狀態描述、說明: 
200 OK      //客戶端請求成功 
400 Bad Request  //客戶端請求有語法錯誤,不能被伺服器所理解 
401 Unauthorized //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 
403 Forbidden  //伺服器收到請求,但是拒絕提供服務 
404 Not Found  //請求資源不存在,eg:輸入了錯誤的URL 
500 Internal Server Error //伺服器發生不可預期的錯誤 
503 Server Unavailable  //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常 
eg:HTTP/1.1 200 OK (CRLF) 

2、響應報頭後述 

3、響應正文就是伺服器返回的資源的內容 



四、HTTP協議詳解之訊息報頭篇 

    HTTP訊息由客戶端到伺服器的請求和伺服器到客戶端的響應組成。請求訊息和響應訊息都是由開始行(對於請求訊息,開始行就是請求行,對於響應訊息,開始行就是狀態行),訊息報頭(可選),空行(只有CRLF的行),訊息正文(可選)組成。 

HTTP訊息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。 
每一個報頭域都是由名字+“:”+空格+值 組成,訊息報頭域的名字是大小寫無關的。 

1、普通報頭 
在普通報頭中,有少數報頭域用於所有的請求和響應訊息,但並不用於被傳輸的實體,只用於傳輸的訊息。 
eg: 
Cache-Control   用於指定快取指令,快取指令是單向的(響應中出現的快取指令在請求中未必會出現),且是獨立的(一個訊息的快取指令不會影響另一個訊息處理的快取機制),HTTP1.0使用的類似的報頭域為Pragma。 
請求時的快取指令包括:no-cache(用於指示請求或響應訊息不能快取)、no-store、max-age、max-stale、min-fresh、only-if-cached; 
響應時的快取指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage. 
eg:為了指示IE瀏覽器(客戶端)不要快取頁面,伺服器端的JSP程式可以編寫如下:response.sehHeader("Cache-Control","no-cache"); 
//response.setHeader("Pragma","no-cache");作用相當於上述程式碼,通常兩者//合用 
這句程式碼將在傳送的響應訊息中設定普通報頭域:Cache-Control:no-cache 


Date普通報頭域表示訊息產生的日期和時間 

Connection普通報頭域允許傳送指定連線的選項。例如指定連線是連續,或者指定“close”選項,通知伺服器,在響應完成後,關閉連線 

2、請求報頭 
請求報頭允許客戶端向伺服器端傳遞請求的附加資訊以及客戶端自身的資訊。 
常用的請求報頭 
Accept 
Accept請求報頭域用於指定客戶端接受哪些型別的資訊。eg:Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept:text/html,表明客戶端希望接受html文字。 
Accept-Charset 
Accept-Charset請求報頭域用於指定客戶端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在請求訊息中沒有設定這個域,預設是任何字符集都可以接受。 
Accept-Encoding 
Accept-Encoding請求報頭域類似於Accept,但是它是用於指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.如果請求訊息中沒有設定這個域伺服器假定客戶端對各種內容編碼都可以接受。 
Accept-Language 
Accept-Language請求報頭域類似於Accept,但是它是用於指定一種自然語言。eg:Accept-Language:zh-cn.如果請求訊息中沒有設定這個報頭域,伺服器假定客戶端對各種語言都可以接受。 
Authorization 
Authorization請求報頭域主要用於證明客戶端有權檢視某個資源。當瀏覽器訪問一個頁面時,如果收到伺服器的響應程式碼為401(未授權),可以傳送一個包含Authorization請求報頭域的請求,要求伺服器對其進行驗證。 
Host(傳送請求時,該報頭域是必需的) 
Host請求報頭域主要用於指定被請求資源的Internet主機和埠號,它通常從HTTP URL中提取出來的,eg: 
我們在瀏覽器中輸入:http://www.guet.edu.cn/index.html
瀏覽器傳送的請求訊息中,就會包含Host請求報頭域,如下: 
Host:www.guet.edu.cn
此處使用預設埠號80,若指定了埠號,則變成:Host:www.guet.edu.cn:指定埠號 
User-Agent 
我們上網登陸論壇的時候,往往會看到一些歡迎資訊,其中列出了你的作業系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,伺服器應用程式就是從User-Agent這個請求報頭域中獲取到這些資訊。User-Agent請求報頭域允許客戶端將它的作業系統、瀏覽器和其它屬性告訴伺服器。不過,這個報頭域不是必需的,如果我們自己編寫一個瀏覽器,不使用User-Agent請求報頭域,那麼伺服器端就無法得知我們的資訊了。 
請求報頭舉例: 
GET /form.html HTTP/1.1 (CRLF) 
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF) 
Accept-Language:zh-cn (CRLF) 
Accept-Encoding:gzip,deflate (CRLF) 
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF) 
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF) 
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF) 
Host:www.guet.edu.cn (CRLF) 
Connection:Keep-Alive (CRLF) 

(CRLF)

3、響應報頭 
響應報頭允許伺服器傳遞不能放在狀態行中的附加響應資訊,以及關於伺服器的資訊和對Request-URI所標識的資源進行下一步訪問的資訊。 
常用的響應報頭 
Location 
Location響應報頭域用於重定向接受者到一個新的位置。Location響應報頭域常用在更換域名的時候。 
Server 
Server響應報頭域包含了伺服器用來處理請求的軟體資訊。與User-Agent請求報頭域是相對應的。下面是 
Server響應報頭域的一個例子: 
Server:Apache-Coyote/1.1 
WWW-Authenticate 
WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應訊息中,客戶端收到401響應訊息時候,併發送Authorization報頭域請求伺服器對其進行驗證時,服務端響應報頭就包含該報頭域。 
eg:WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出伺服器對請求資源採用的是基本驗證機制。 


4、實體報頭 
請求和響應訊息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但並不是說實體報頭域和實體正文要在一起傳送,可以只發送實體報頭域。實體報頭定義了關於實體正文(eg:有無實體正文)和請求所標識的資源的元資訊。 
常用的實體報頭 
Content-Encoding 
Content-Encoding實體報頭域被用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體型別,必須採用相應的解碼機制。Content-Encoding這樣用於記錄文件的壓縮方法,eg:Content-Encoding:gzip 
Content-Language 
Content-Language實體報頭域描述了資源所用的自然語言。沒有設定該域則認為實體內容將提供給所有的語言閱讀 
者。eg:Content-Language:da 
Content-Length 
Content-Length實體報頭域用於指明實體正文的長度,以位元組方式儲存的十進位制數字來表示。 
Content-Type 
Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體型別。eg: 
Content-Type:text/html;charset=ISO-8859-1 
Content-Type:text/html;charset=GB2312 
Last-Modified 
Last-Modified實體報頭域用於指示資源的最後修改日期和時間。 
Expires 
Expires實體報頭域給出響應過期的日期和時間。為了讓代理伺服器或瀏覽器在一段時間以後更新快取中(再次訪問曾訪問過的頁面時,直接從快取中載入,縮短響應時間和降低伺服器負載)的頁面,我們可以使用Expires實體報頭域指定頁面過期的時間。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT 
HTTP1.1的客戶端和快取必須將其他非法的日期格式(包括0)看作已經過期。eg:為了讓瀏覽器不要快取頁面,我們也可以利用Expires實體報頭域,設定為0,jsp中程式如下:response.setDateHeader("Expires","0"); 

五、利用telnet觀察http協議的通訊過程 

    實驗目的及原理: 
    利用MS的telnet工具,通過手動輸入http請求資訊的方式,向伺服器發出請求,伺服器接收、解釋和接受請求後,會返回一個響應,該響應會在telnet視窗上顯示出來,從而從感性上加深對http協議的通訊過程的認識。 

    實驗步驟: 

1、開啟telnet 
1.1 開啟telnet 
執行-->cmd-->telnet 

1.2 開啟telnet回顯功能 
set localecho 

2、連線伺服器併發送請求 
2.1 open www.guet.edu.cn 80  //注意埠號不能省略 

    HEAD /index.asp HTTP/1.0 
    Host:www.guet.edu.cn

   /*我們可以變換請求方法,請求桂林電子主頁內容,輸入訊息如下*/ 

相關推薦

HTTP以及SOAP協議

引言                                        HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。目前在WWW中使用的是HTT

應用層協議HTTP與HTTPS協議、二者的區別

http協議詳解 1、HTTP協議:超文字傳輸協議 是一種分散式、合作式、多媒體資訊系統服務,面向應用層的協議。是一種通用的,不分狀態的協議。是一種請求/應答協議。 1.1、HTTP/1.0和HTTP/1.1的比較 RFC 1945定義了HTT

http,tcp,ip,協議

一,HTTP請求行中的方法用於HTTP的動作方式,常用的方法有GET、HEAD和POST。 不同的請求物件對應GET的結果是不同的,對應關係如下: 物件                           GET的結果檔案                          

Web Service筆記(三):wsdl 與 soap協議

一、WSDL語言:(web service definition language - web service定義語言) (一)簡介: 2、wsdl 文件描述了 ws 主要的3個方面: 1)WHATA:該 ws 包含”什麼“操作,即有幾個方法。 2)HOW:該 ws

HTTP協議以及URL具體訪問過程

標記語言 初始化 折疊 code 文件類型 scheme 缺少 gif 其他瀏覽器 1、簡介   1.1、HTTP協議是什麽?   即超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必

HTTP協議(真的很經典)

cnp 運用 web應用 media 服務器端 所有 長度 request bad 轉載:http://e7kan.com/?p=264& 引言 HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾

http協議

表單 pos 換行 none 必須掌握 通信 pow print expires HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1

HTTP 協議

範圍 文件傳輸 ext text 繼續 warn 分組 asi nsf 前言:   之前買過一本《圖解 HTTP》這本書,作者好像是個小日本,也繼承了小日本在動漫方面的天賦,30% 的內容都是 Q 版畫圖。   之後沒有引起我的重視,書一借出去,然後,之後 .. 之後,

Http 協議筆記

code sps 網頁 提示 agent tor 指定 6.0 lec HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六

HTTP協議報文、工作原理及Java中的HTTP通信技術

tor 報文 buffered mod protoc 禁止 ans 請求報文 客戶端 博客園 首頁 新隨筆 聯系 管理 訂閱

HTTP協議??

www protocol tcp url web nsf ide 信息 http HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web)服務器傳輸超文本到本地瀏覽器的傳送

HTTP傳輸協議(簡單易懂)

前言 HTTP: HyperText Transfer Protocol超文字傳輸協議,是網際網路上應用最為廣泛的一種網路協議,所有的WWW檔案都必須遵守這個標準;屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不

Javaweb:http協議

HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工作正在進行之中,而且HTTP-NG(Next Generat

筆記轉載 HTTP [轉]HTTP協議,你所不知道的

[轉]HTTP協議詳解,你所不知道的   什麼是HTTP協議 協議是指計算機通訊網路中兩臺計算機之間進行通訊所必須共同遵守的規定或規則,超文字傳輸協議(HTTP)是一種通訊協議,它允許將超文字標記語言(HTML)文件從Web伺服器傳送到客戶端的瀏覽器

HTTP協議(真的很經典)--轉載

連續 查找 初始 出現 門戶 全部 4.0 form ons 概要: HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分布式超媒體信息系統 | |目錄 1引言 2一

HTTP協議 轉自小坦克

當今web程式的開發技術真是百家爭鳴,ASP.NET, PHP, JSP,Perl, AJAX 等等。 無論Web技術在未來如何發展,理解Web程式之間通訊的基本協議相當重要, 因為它讓我們理解了Web應用程式的內部工作. 本文將對HTTP協議進行詳細的例項

HTTP協議-HTTP協議

HTTP協議是一個網際網路協議,不僅用來傳輸網頁。也被很多的軟體用來與伺服器通訊,在協議中包含了許多的通訊樣式的規定等,接下來就讓我們從頭開始瞭解它。 3.1. 在TCP/IP協議棧中的位置 HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端伺服器模

第六章 應用層(DNS和http協議)

    序言        這是計算機網路基礎的最後一篇博文了,大體的從物理層到最上層的應用層做了一個大概的瞭解,花了也有快1個月的時間了,在本章結尾會給你們我學習該課程的視訊資料,我希望能幫到所有想學習想提高自己技術的同學,我看到很多厲害的的部落格的文章都被鎖了,我希望高手度能夠幫助剛成長並且想努力提高技術

Java當中的HTTP協議

HTTP協議 1. 什麼是協議 雙方在互動、通訊的時候,遵守的一種規範、規則。 2. HTTP協議     針對網路上的客戶端與伺服器端在執行HTTP請求的時候,遵守的一種規範,其實就是規定了客戶端在訪問伺服器的時候,要帶上那些東西,伺服器端返回資料的時候,也要帶上什

HTTP 協議

HTTP  協議詳解 引言 HTTP 是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1 的規範化工作