客戶請(qǐng)求的處理HTTP請(qǐng)求報(bào)頭.ppt_第1頁(yè)
客戶請(qǐng)求的處理HTTP請(qǐng)求報(bào)頭.ppt_第2頁(yè)
客戶請(qǐng)求的處理HTTP請(qǐng)求報(bào)頭.ppt_第3頁(yè)
客戶請(qǐng)求的處理HTTP請(qǐng)求報(bào)頭.ppt_第4頁(yè)
客戶請(qǐng)求的處理HTTP請(qǐng)求報(bào)頭.ppt_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、客戶請(qǐng)求的處理:HTTP請(qǐng)求報(bào)頭,主講:劉曉濤,議程,HTTP請(qǐng)求報(bào)頭的讀取制作所有請(qǐng)求報(bào)頭的表格了解各種請(qǐng)求報(bào)頭通過(guò)壓縮頁(yè)面減少下載時(shí)間區(qū)分不同的瀏覽器類型,一個(gè)典型的HTTP請(qǐng)求,GET/servlet/Search?keywords=servlets+jspHTTP/1.1Accept:image/gif,image/jpg,*/*Accept-Encoding:gzipConnection:Keep-AliveCookie:userID=id456578Host:Referer:,請(qǐng)求報(bào)頭的讀取(HttpServletRequest中的方法),通用方法getHeader(報(bào)頭名對(duì)大小寫(xiě)

2、不敏感)getHeadersgetHeaderNames專用方法getCookiesgetAuthType和getRemoteUsergetContentLengthgetContentTypegetDateHeadergetIntHeader獲取相關(guān)信息的方法getMethod,getRequestURI,getQueryString,getProtocol,缺失報(bào)頭的檢查,HTTP1.0所有請(qǐng)求報(bào)頭都是可選的HTTP1.1僅Host是必需的結(jié)論在試圖使用由request.getHeader返回的值之前一定要檢查它是否為null。Stringval=request.getHeader(Som

3、e-Name);if(val!=null),制作所有請(qǐng)求報(bào)頭的表格,publicclassShowRequestHeadersextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionout.println(docType+n+title+n+n+title+n+RequestMethod:+request.getMethod()+n+RequestURI:+request.getRequestURI()+n+

4、RequestProtocol:+request.getProtocol()+n+,制作所有請(qǐng)求報(bào)頭的表格(續(xù)),n+n+HeaderNameHeaderValue);EnumerationheaderNames=request.getHeaderNames();while(headerNames.hasMoreElements()StringheaderName=(String)headerNames.nextElement();out.println(+headerName);out.println(+request.getHeader(headerName);out.println(n)

5、;publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptiondoGet(request,response);,常見(jiàn)HTTP1.1請(qǐng)求報(bào)頭,Accept標(biāo)示瀏覽器能夠處理的MIME類型可以向不同的客戶程序發(fā)送不同的內(nèi)容。例如,PNG文件擁有較好的壓縮特性但并不被瀏覽器廣泛支持。servlet可以檢查瀏覽器是否支持PNG文件,如果支持則發(fā)送否則發(fā)送。警告:在點(diǎn)擊Refresh按鈕時(shí),IE會(huì)錯(cuò)誤在設(shè)置這個(gè)報(bào)頭。但在最初的請(qǐng)求中,對(duì)這個(gè)報(bào)頭的設(shè)置是正確

6、的Accept-Encoding標(biāo)示瀏覽器能夠處理的編碼(如gzip或compress)參見(jiàn)隨后的例子,常見(jiàn)HTTP1.1請(qǐng)求報(bào)頭(續(xù)),Authorization用于發(fā)送受密碼保護(hù)的頁(yè)面的用戶身份驗(yàn)證信息。應(yīng)該盡可能使用HTML表單來(lái)發(fā)送用戶名/密碼,在會(huì)話對(duì)象中存儲(chǔ)信息;而不是這個(gè)報(bào)頭。因?yàn)檫@種方式會(huì)彈出一個(gè)小而簡(jiǎn)練的對(duì)話框,許多用戶不熟悉它。服務(wù)器擁有其他高級(jí)的方式來(lái)設(shè)置受密碼保護(hù)的頁(yè)面,無(wú)須顯式地在servlet中編寫(xiě)相關(guān)的代碼。,常見(jiàn)HTTP1.1請(qǐng)求報(bào)頭(續(xù)),Connection在HTTP1.0中,keep-alive表示瀏覽器能夠處理持續(xù)性連接。在HTTP1.1中,持續(xù)性連接是

7、默認(rèn)的。持續(xù)性連接表示:對(duì)于來(lái)自同一客戶的相隔時(shí)間很近的請(qǐng)求(如與同一頁(yè)面相關(guān)聯(lián)的圖像,或具有框架的頁(yè)面中的不同單元),服務(wù)器可以重用已有的socket。servlet并不能單方面地完成這項(xiàng)工作;要使持續(xù)性連接的使用成為可能,它們能夠做的就是給予服務(wù)器足夠的信息。因此,它們應(yīng)該用setContentLength設(shè)置Content-Length(輸出的長(zhǎng)度使用ByteArrayOutputStream來(lái)確定)。Cookie給出之前發(fā)送到客戶端的cookie。使用getCookies,不要使用getHeader。參見(jiàn)后面的課程。,常見(jiàn)HTTP1.1請(qǐng)求報(bào)頭(續(xù)),Host標(biāo)示最初的URL中給出的主

8、機(jī)。在HTTP1.1中這是一個(gè)必需的報(bào)頭。如果您在編寫(xiě)定制的HTTP客戶程序,或者使用HTTP/1.1版本telnet到服務(wù)器,那么了解這一點(diǎn)十分重要。If-Modified-Since標(biāo)示僅當(dāng)在指定的日期之后被改動(dòng)過(guò)時(shí)客戶才希望獲得該頁(yè)面不要直接處理這種情況,而應(yīng)實(shí)現(xiàn)getLastModified。,常見(jiàn)HTTP1.1請(qǐng)求報(bào)頭(續(xù)),Referer引用頁(yè)面的URL對(duì)于流量跟蹤有作;許多服務(wù)器都記錄這項(xiàng)信息也可用來(lái)讓用戶設(shè)置相應(yīng)的參數(shù),然后再返回到跳轉(zhuǎn)過(guò)來(lái)的頁(yè)面很容易被哄騙;所以不要將它作為確定付費(fèi)網(wǎng)站顯示了多少次您的標(biāo)題廣告的唯一途徑。某些瀏覽器(Opera),廣告過(guò)濾器(WebWasher

9、),和個(gè)人防火墻(Norton)會(huì)屏蔽這個(gè)報(bào)頭User-Agent最好用來(lái)鑒定客戶的類型瀏覽器、I-mode的移動(dòng)電話等。對(duì)于Web應(yīng)用,請(qǐng)盡可能使用其他報(bào)頭。同樣,也很容易被哄騙。參見(jiàn)后面的例子,發(fā)送經(jīng)過(guò)壓縮的Web頁(yè)面:GzipUtilities.java,publicclassGzipUtilitiespublicstaticbooleanisGzipSupported(HttpServletRequestrequest)Stringencodings=request.getHeader(Accept-Encoding);return(encodings!=null),發(fā)送經(jīng)過(guò)壓縮的We

10、b頁(yè)面:LongServlet.java,publicclassLongServletextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionresponse.setContentType(text/html);/Changethedefinitionofoutdependingon/whetherornotgzipissupported.PrintWriterout;if(GzipUtilities.isG

11、zipSupported(request),發(fā)送經(jīng)過(guò)壓縮的Web頁(yè)面:LongServlet.java(續(xù)),out.println(docType+n+title+n+n+title+n);Stringline=Blah,blah,blah,blah,blah.+Yadda,yadda,yadda,yadda.;for(inti=0;i);out.close();,發(fā)送經(jīng)過(guò)壓縮的頁(yè)面:結(jié)果,未經(jīng)壓縮(28.8Kmodem),Netscape和InternetExplorer:50seconds經(jīng)過(guò)壓縮(28.8Kmodem),Netscape和InternetExplorer:5second

12、s注意:在處理這些基準(zhǔn)數(shù)據(jù)時(shí)要小心,區(qū)分不同的瀏覽器類型,僅在必需時(shí)才使用User-Agent否則,我們最終的代碼不得不維護(hù)瀏覽器各個(gè)版本及其功能的表格,導(dǎo)致代碼難以維護(hù)。檢查nullHTTP1.1規(guī)范并不要求這個(gè)報(bào)頭,某些瀏覽器允許用戶禁止這個(gè)報(bào)頭(如Opera),一些定制客戶程序甚至有可能根本就不使用這個(gè)報(bào)頭。如果要區(qū)分Netscape和InternetExplorer,請(qǐng)檢查“MSIE”,而非“Mozilla”在這個(gè)報(bào)頭的開(kāi)始,Netscape和InternetExplorer都設(shè)置“Mozilla”。這是為了JavaScript的兼容性。要注意,這個(gè)報(bào)頭可以偽造。如果某個(gè)客戶偽造這個(gè)報(bào)頭,服務(wù)器根本無(wú)從察覺(jué)。,區(qū)分不同的瀏覽器類型(代碼),publicclassBrowserInsultextendsHttpServletpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOExceptionresponse.setContentType(text/html);PrintWriterout=response.getWriter();Stringtitle,message;StringuserAgent=request.get

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論