當前位置:編程學習大全網 - 編程語言 - 如何修改http請求的數據格式?

如何修改http請求的數據格式?

HTTP客戶端請求數據格式

servlet程序大多通過HTTP協議與瀏覽器客戶端進行通信,這就需要程序員對程序的基本功能和HTTP協議的具體操作有深刻的理解。學習。

在編寫servlet和Jsp時,有兩點值得註意:壹是要熟悉HTTP協議的操作流程和數據格式,二是要靈活應用servlet API中的相關方法。

正確有效地處理相關數據。

壹、HTTP客戶端請求的數據格式描述

HTTP請求包括三個部分:請求行(請求

行)、標題和數據體。請求行由請求方法、請求URL請求URI和協議組成。

(協議),而請求頭包含多個屬性,數據體可以認為是附加在請求上的文本或二進制文件。

下面的例子展示了壹個HTTP請求的頭內容,它實際上是通過網絡HTTP協議從IE瀏覽器傳輸到Tomcat服務器的。

GET /icwork/?搜索=產品HTTP/1.1

接受:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,*。*

接受語言:美國英語

接受編碼:gzip,deflate

用戶代理:Mozilla/4.0(兼容;MSIE 5.01;Windows NT 5.0DigExt)

主持人:

推薦人:

連接:保持活動狀態

這個程序使用了六個頭,有些頭沒有出現。我們參考這個例子來詳細解釋HTTP請求格式。

1.HTTP請求行:請求行的格式是方法請求-URI協議。上例中挑逗GET /icwork/?search = p ruduct http/1.1是請求行。

2.接受:指瀏覽器或其他客戶可以訪問的MIME文件格式。Servlet可以根據它判斷並返回合適的文件格式。

3.Accept-Charset:表示瀏覽器可接受的字符編碼。英文瀏覽器的默認值是ISO-8859-1。

4.Accept-Language:表示瀏覽器可以接受的語言類型,如en或en-us,指英語。

5.Accept-Encoding:表示瀏覽器可接受的編碼方法。編碼方式不同於文件格式,它是為了壓縮文件,加快文件傳輸。瀏覽器收到Web響應後對其進行解碼,然後檢查文件格式。

6.授權:用於在使用密碼機制時識別瀏覽器。

7.Cache-Control:設置代理服務器存儲請求的相關選項。通常servlet不用。

8.連接:用於告訴服務器是否可以保持固定的HTTP連接。HTTP/1.1使用Keep-Alive作為默認值,這樣當瀏覽器需要多個文件(比如壹個HTML文件和相關的圖形文件)時,就不需要每次都建立連接。

9.Content-Type:用於表化名稱請求的內容類型。您可以通過使用HttpServletRequest的getContentType()方法來獲取它。

10.Cookie:瀏覽器使用這個屬性向服務器發送Cookie。Cookie是註冊在瀏覽器中的壹個小數據體,可以記錄與服務器相關的用戶信息,也可以用來實現會話功能。

11.預期:表示客戶的預期響應狀態。

12.From:給出負責客戶端HTTP請求的人的電子郵件地址。

13.主機:相應URL中的網站名稱和端口號。

14.If-Match:由PUT方法使用。

15.If-Modified-Since:客戶使用該屬性來表示它只需要在指定日期之後更改過的頁面。因為瀏覽器可以使用其存儲的文件,而不必從服務器請求它們,這節省了Web資源。因為Servlet是動態生成的網頁,所以通常不需要使用這個屬性。

16.If-None-Match:PUT方法使用與If-Match相反的操作。

17.If-Unmodified-Since:與If-Match-Since相反。

18.Pragma:該屬性只有壹個值,即pragma: no-cache,表示如果servlet充當代理服務器,那麽即使它已經存儲了網頁,請求也應該被傳遞到目的服務器。

19.代理授權:代理服務器使用這個屬性,但是Servlet通常不使用。

20.範圍:如果客戶有壹些網頁,該屬性可以請求其余的。

21.Referer:表示生成請求的網頁的URL。單擊從網頁/icconcept/index.jsp到網頁/icwork的鏈接。

/search,在GET/icwork/search發送到服務器的請求中,Referer是

/icconcept/index.jsp .該屬性可用於跟蹤web請求來自哪個網站。

22.Upgrage:客戶可以通過該屬性設置使用從HTTP/1.1的不同協議。

23.用戶代理:它是客戶端瀏覽器的名稱。

24.Via:用於記錄Web請求通過的代理服務器或Web通道。

25.警告:用於由客戶聲明交付或緩存錯誤。

補充。傳輸編碼:

當不能預先確定報紙樣式的長度時,不可能在標題中包括內容長度字段來指示報紙樣式的長度。此時,需要通過Transfer-Encoding字段來確定報紙樣式的長度。

通常,Transfer-Encoding字段的值應該是分塊的,表示分塊編碼用於傳輸報紙樣式。分塊編碼是HTTP/1.1 RFC中定義的壹種編碼方法,所以所有的HTTP/1.1應用都應該支持這種方法。

組塊編碼的基本方法是將壹個大數據塊分解成幾個小塊,每個小塊可以指定自己的長度。

二、下面是壹個servlet(tomcat分析並顯示客戶請求的頭信息(在tomcat下測試通過):

Java代碼

代碼:

導入javax . servlet . *;

導入javax . servlet . http . *;

導入Java . io . *;

導入Java . util . enumeration;

公共類headerinfo擴展HttpServlet{

public void doPost(http servlet request req,HttpServletResponse resp)

拋出ServletException,IOException

{

/*

enumeration e = req . getheadernames();

while(e . hasmorelements()){

String s =(String)e . nextelement();

system . out . println(" header:"+s+" "+req . get header(s));

}

e = req . getattributenames();

while(e . hasmorelements()){

String s =(String)e . nextelement();

system . out . println(" attribute:"+s+" "+req . get attribute(s));

}

e = req . getparameternames();

while(e . hasmorelements()){

String s =(String)e . nextelement();

system . out . println(" parameter:"+s+" "+req . getparameter(s));

}*/

resp . set content type(" text/html;charset = GBK ");

PrintWriter out = resp . getwriter();

out . println(" & lt;html & gt& lthead & gt& lttitle & gtFormParameterServlet & lt/title & gt;& lt/head >;);

out . println(" & lt;body bgcolor = \ " white \ " & gt);

out . println(" & lt;中心& gt& ltfont color = \ " # 009999 \ " size = \ " 4 \ " face = \ " Arial \ " & gt;);

out . println(" & lt;strong & gtServlet請求中所有頭的列表& lt/strong >;);

out . println(" & lt;/font & gt;& lt/center >);

out . println(" & lt;HR >;");

out . println(" & lt;H3 & gt;請求行是:& lt/H3 >);

out . println(" & lt;b & gt方法:& lt/b & gt;+req . get method()+" & lt;br >;);

out . println(" & lt;b & gtURI:& lt;/b & gt;+req . getrequesturi()+" & lt;br >;);

out . println(" & lt;b & gt協議& lt/b & gt;+req . get protocol()+" & lt;br >;);

out . println(" & lt;中心& gt& lth3 & gt標題名稱和值& lt/H3 & gt;& lt/center >);

out . println(" & lt;table border = 1 align = center >);

out . println(" & lt;tr bgcolor = ' # 99cee6 ' & gt& ltth & gt名稱& lt/th & gt;& ltth & gt價值& lt/th & gt;& lt/tr >;);

enumeration header names = req . get header names();

while(header names . hasmoreelements()){

String header name =(String)header names . nextelement();

out . println(" & lt;tr & gt& ltTD >;+header name+" & lt;/TD & gt;& ltTD >;+req . get header(header name)+" & lt;/TD & gt;& lt/tr >;);

}

out . println(" & lt;/table & gt;& lt/body & gt;& lt/html >);

out . flush();

}

公共void doGet(http servlet request req,HttpServletResponse resp)

拋出ServletException,IOException

{

doPost(req,resp);

}

}

  • 上一篇:計算機專業真的很難學嗎?學計算機數學不好可以學嗎?
  • 下一篇:河北民族師範學院人工智能專業怎麽樣
  • copyright 2024編程學習大全網