H應(yīng)用協(xié)議的實(shí)現(xiàn)_第1頁
H應(yīng)用協(xié)議的實(shí)現(xiàn)_第2頁
H應(yīng)用協(xié)議的實(shí)現(xiàn)_第3頁
H應(yīng)用協(xié)議的實(shí)現(xiàn)_第4頁
H應(yīng)用協(xié)議的實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩89頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

應(yīng)用協(xié)議的實(shí)現(xiàn)概述應(yīng)用協(xié)議規(guī)范SMTP通信協(xié)議POP3通信協(xié)議FTP協(xié)議HTTP協(xié)議統(tǒng)一資源定位器URL類與HTTP協(xié)議1

概述TCP/IP模型將OSI參考模型中的會話層和表示層的功能合并到應(yīng)用層。針對各種各樣的網(wǎng)絡(luò)應(yīng)用,應(yīng)用層引入了許多協(xié)議,稱為應(yīng)用協(xié)議。應(yīng)用協(xié)議服務(wù)于各種應(yīng)用功能:收發(fā)電子郵件(E-mail)上傳和下載文件瀏覽網(wǎng)站登錄遠(yuǎn)程服務(wù)器應(yīng)用協(xié)議分為兩種傳輸協(xié)議:UDP傳輸協(xié)議TCP協(xié)議傳輸協(xié)議本章重點(diǎn)討論基于底層TCP和UDP協(xié)議套接字上的網(wǎng)絡(luò)通信的編程實(shí)現(xiàn)。2基于TCP協(xié)議傳輸協(xié)議的應(yīng)用層協(xié)議基于UDP傳輸協(xié)議的應(yīng)用層協(xié)議RFC(RequestForComment

)文檔介紹

應(yīng)用協(xié)議規(guī)范3基于TCP協(xié)議的應(yīng)用層協(xié)議1.TELNET,虛擬終端協(xié)議2.FTP(FileTransferProtocol),文件傳輸協(xié)議3.POP3(PostOfficeProtocol-Version3),郵局協(xié)議-版本34.IMAP4(InternetMessageAccessPprotocol-Version4),Internet消息訪問協(xié)議-版本45.SMTP(SimpleMailTransferProtocol),簡單郵件傳送協(xié)議6.HTTP(HypertextTransferProtocol),超文本傳輸協(xié)議7.HTTPS(SecureHypertextTransferProtocol),安全超文本傳輸協(xié)議4表5-1常見的應(yīng)用層協(xié)議使用的TCP協(xié)議端口5基于UDP協(xié)議的應(yīng)用層協(xié)議1.SNMP(SimpleNetworkManagementProtocol)簡單網(wǎng)絡(luò)管理協(xié)議2.DNS(DomainNameServer)域名解析協(xié)議6RFC(RequestForComment)

文檔介紹RFC編號協(xié)議768用戶數(shù)據(jù)報(bào)協(xié)議(UDP)783日常文件傳輸協(xié)議(TFTP)791Internet協(xié)議(IP)792Internet控制消息協(xié)議(ICMP)793傳輸控制協(xié)議(TCP協(xié)議)821郵件傳輸協(xié)議(SMTP,最新更新RFC5336)RFC編號協(xié)議854Telnet協(xié)議(TELNET)959文件傳輸協(xié)議(FTP,最新更新RFC3659)1157簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)1939郵局協(xié)議-版本3(POP3,最新更新RFC5034)1945超級文本傳輸協(xié)議-版本1.0(HTTP1.0)2060Internet消息訪問協(xié)議-版本4(IMAP4)2068超文本傳輸協(xié)議-版本1.1(HTTP1.1,為RFC1945的更新版,第二次更新RFC2616)7SMTP通信協(xié)議81SMTP介紹當(dāng)用戶需要發(fā)送郵件時(shí),SMTP客戶程序使用一組簡單的命令與SMTP服務(wù)器關(guān)聯(lián),并通過它把郵件發(fā)送出去,而后結(jié)束連接和發(fā)送。1.SMTP請求/響應(yīng)協(xié)議命令與格式命令和響應(yīng)都是基于ASCII文本,命令以CRLF符結(jié)束為一條命令格式,其中CR為“\r”表示回車,LF為“\n”表示換行,SP表示空格。應(yīng)答碼:響應(yīng)包括一個(gè)表示返回狀態(tài)的三位數(shù)字代碼。2.SMTP協(xié)議的傳輸模型3.SMTP協(xié)議發(fā)送郵件過程91.SMTP請求/響應(yīng)協(xié)議命令與格式命令格式描述HELO/EHLOHELO<SP><domain><CRLF>指明郵件發(fā)送者的主機(jī)域名MAILFROMMAIL<SP>FROM:<reverse-path><CRLF>指明郵件發(fā)送者的信箱名稱RCPTTORCPT<SP>TO:<forward-path><CRLF>指明郵件接收者的信箱名稱DATADATA<CRLF>表示發(fā)送郵件內(nèi)容(包括信頭和信體)QUITQUIT<CRLF>終止郵件會話HELPHELP[<SP><string><CRLF>]查詢服務(wù)器支持什么命令RSETRSET<CRLF>重設(shè)郵件連接NOOPNOOP<CRLF>無操作,服務(wù)器應(yīng)響應(yīng)OKTURNTURN<CRLF>接收端和發(fā)送端交換角色10SMTP的應(yīng)答碼應(yīng)答碼描述214幫助信息220服務(wù)就緒221服務(wù)關(guān)閉250郵件操作完成354開始輸入郵件內(nèi)容,以“.”結(jié)束421服務(wù)未就緒,關(guān)閉傳輸通道501命令參數(shù)格式錯(cuò)誤502命令不支持503錯(cuò)誤的命令序列504命令參數(shù)不支持112.SMTP協(xié)議的傳輸輸模型圖SMTP協(xié)議傳輸模模型123.SMTP協(xié)議發(fā)送郵郵件過程SMTP協(xié)議發(fā)送一一封電子郵郵件從SMTP客戶端傳輸輸?shù)絊MTP服務(wù)器,只只用表5-3所示中前5個(gè)命令即可可。客戶端端與郵件服服務(wù)器連接接和發(fā)送郵郵件過程如如下:①客客戶戶端端A與郵郵件件服服務(wù)務(wù)器器B建立立TCP/IP協(xié)議議連連接接;;郵郵件件服服務(wù)務(wù)器器B響應(yīng)應(yīng),,返返回回應(yīng)應(yīng)答答碼碼220,表表示示就就緒緒。。②客客戶戶端端A發(fā)送送““HELO”命令令以以標(biāo)標(biāo)識識發(fā)發(fā)件件人人自自己己的的身身份份,,即即發(fā)發(fā)件件人人主主機(jī)機(jī)域域名名,,郵郵件件服服務(wù)務(wù)器器B響應(yīng)應(yīng),,返返回回應(yīng)應(yīng)答答碼碼250,表表明明可可以以接接收收。。③客客戶戶端端A發(fā)送送““MAILFROM”命令令,,以以標(biāo)標(biāo)識識該該電電子子郵郵件件的的發(fā)發(fā)件件人人郵郵件件地地址址,,服服務(wù)務(wù)器器B返回回應(yīng)應(yīng)答答碼碼250及OK作為為響響應(yīng)應(yīng),,表表明明準(zhǔn)準(zhǔn)備備接接收收郵郵件件。。④客客戶戶端端A發(fā)送送““RCPTTO”命令令,,以以標(biāo)標(biāo)識識該該電電子子郵郵件件的的接接收收人人郵郵件件地地址址,,服服務(wù)務(wù)器器B返回回應(yīng)應(yīng)答答碼碼250及OK作為為響響應(yīng)應(yīng)。。⑤協(xié)協(xié)商商結(jié)結(jié)束束,,發(fā)發(fā)送送郵郵件件,,客客戶戶端端A發(fā)送送命命令令““DATA”,服服務(wù)務(wù)器器B返回回應(yīng)應(yīng)答答碼碼354,可可發(fā)發(fā)送送內(nèi)內(nèi)容容,,并并說說明明發(fā)發(fā)送送““.”表表示示結(jié)結(jié)束束。??涂蛻魬舳硕薃發(fā)送送郵郵件件內(nèi)內(nèi)容容。。⑥客客戶戶端端A發(fā)送送““.”表表示示結(jié)結(jié)束束輸輸入入內(nèi)內(nèi)容容,,服服務(wù)務(wù)器器B返回回應(yīng)應(yīng)答答碼碼250,表表示示此此操操作作完完畢畢。。⑦結(jié)結(jié)束束此此次次發(fā)發(fā)送送,,客客戶戶端端A發(fā)送送命命令令““QUIT”退出出。。服服務(wù)務(wù)器器B返回回應(yīng)應(yīng)答答碼碼221,表表示示服服務(wù)務(wù)器器B關(guān)閉閉。。132SMTP客戶戶端端———Java應(yīng)用程序序publicclasssendSMTPMail{/***<br>方法法說明::主方法法*<br>輸入入?yún)?shù)::1服服務(wù)器ip;2對方方郵件地地址*<br>返回回類型::*/publicstaticvoidmain(String[]arges){if(arges.length!=2){System.out.println("usejavasendSMTPMailhostname|mailto");return;}sendSMTPMailt=newsendSMTPMail();t.sendMail(arges[0],arges[1]);}14publicvoidsendMail(StringmailServer,Stringrecipient){try{//有Socket打開25端口Sockets=newSocket(mailServer,25);//緩存輸入入和輸出出BufferedReaderin=newBufferedReader(newInputStreamReader(s.getInputStream()));BufferedWriterout=newBufferedWriter(newOutputStreamWriter(s.getOutputStream()));//發(fā)出“HELO”命令,表表示對服服務(wù)器的的問候send(out,"HELOaaa");//告訴服務(wù)務(wù)器我的的郵件地地址,有有些服務(wù)務(wù)器要校校驗(yàn)這個(gè)個(gè)地址send(out,"MAILFROM:<06281040@>");//使用““RCPTTO”命令告告訴服服務(wù)器器解釋釋郵件件的郵郵件地地址send(out,"RCPTTO:"+recipient);//發(fā)送一一個(gè)““DATA””表示下下面將將是郵郵件主主體send(out,"DATA");15//使用Subject命令標(biāo)標(biāo)注郵郵件主主題Stringstr1="Subject:zaoshanghao";send(out,str1);//使用““From””標(biāo)注郵郵件的的來源源send(out,"From:06281040@");send(out,"\n");//郵件主主體send(out,"呵呵");send(out,"\n.\n");//發(fā)送““QUIT””端口郵郵件的的通訊訊send(out,"QUIT");s.close();}catch(Exceptione){e.printStackTrace();}}16publicvoidsend(BufferedWriterout,Strings){try{out.write(s+"\n");out.flush();System.out.println(s);}catch(Exceptione){e.printStackTrace();}}17POP3通信協(xié)協(xié)議181POP3介紹POP3郵件服服務(wù)器器接收收并保保存郵郵件POP3分客戶戶端程程序和和服務(wù)務(wù)器POP3也是命命令請請求/響應(yīng)協(xié)協(xié)議在TCP協(xié)議110號端口口監(jiān)聽聽連接接請求求。1、合法法身份份登錄錄,即即客戶戶端發(fā)發(fā)送命命令““USER””和“PASS””。服務(wù)務(wù)器應(yīng)應(yīng)答返返回““+OK”,表示示用戶戶登錄錄成功功,此此時(shí)由由認(rèn)可可狀態(tài)態(tài)轉(zhuǎn)換換為處處理狀狀態(tài)。。2、客戶戶端發(fā)發(fā)送一一系列列POP3命令,,服務(wù)務(wù)器應(yīng)應(yīng)答““+OK”成功和和“-ERR”失敗兩種。。轉(zhuǎn)換為處處理狀態(tài)。。POP3協(xié)議中有三種狀狀態(tài):認(rèn)可可、處理和和更新狀態(tài)態(tài)。19POP3的主要命令令、格式和和描述命令格式狀態(tài)描述USERUSER<SP><username><CRLF>認(rèn)可用戶名,此命令與下面的PASS命令若成功,將導(dǎo)致狀態(tài)轉(zhuǎn)換PASSPASS<SP><password><CRLF>認(rèn)可用戶密碼,命令若成功,狀態(tài)由“認(rèn)可”轉(zhuǎn)換為“處理”STATSTAT<CRLF>處理請求服務(wù)器發(fā)回關(guān)于郵箱的統(tǒng)計(jì)資料,如郵件總數(shù)和總字節(jié)數(shù);信箱狀態(tài)RETRRETR<SP><msg><CRLF>處理返回由參數(shù)標(biāo)識的郵件的全部文本LISTLIST<SP>[msg]<CRLF>處理返回郵件數(shù)量和每個(gè)郵件的大小QUITQUIT<CRLF>更新退出并把做過DELE標(biāo)記的郵件刪掉DELEDELE<SP><msg><CRLF>處理服務(wù)器將由參數(shù)標(biāo)識的郵件標(biāo)記為刪除,由QUIT命令執(zhí)行RSETRSET<CRLF>處理服務(wù)器將重置所有標(biāo)記為刪除的郵件,用于撤銷DELE命令UIDLUIDL<SP>[msg]<CRLF>處理返回郵件的唯一標(biāo)識符,POP3會話的每個(gè)標(biāo)識符都將是唯一的TOPTOP<SP><msgn><CRLF>處理服務(wù)器將返回由參數(shù)標(biāo)識的郵件前n行內(nèi)容,n必須是正整數(shù)NOOPNOOP<CRLF>處理服務(wù)器返回一個(gè)肯定的響應(yīng)20常用命令命令都是基基于ASCII文本的,最最常用的是是USER、PASS、STAT、RETR、DELE和QUIT21classPOP3Demo{privatestaticStringPOP3Server="";privatestaticStringUSERNAME="username";//實(shí)際應(yīng)用中中改成真實(shí)實(shí)的用戶名名privatestaticStringPASSWORD="password";//實(shí)際應(yīng)用中中改成真實(shí)實(shí)的密碼publicstaticvoidmain(String[]args){intPOP3Port=110;Socketclient=null;try{//向POP3服務(wù)程序建建立一個(gè)套套接字連接接。client=newSocket(POP3Demo.POP3Server,POP3Port);//創(chuàng)建一個(gè)BufferedReader對象,以便便從套接字字讀取輸出出。InputStreamis=client.getInputStream();BufferedReadersockin=newBufferedReader(newInputStreamReader(is));//創(chuàng)建一個(gè)PrintWriter對象,以便便向套接字字寫入內(nèi)容容。OutputStreamos=client.getOutputStream();PrintWritersockout=newPrintWriter(os,true);//顯示同SMTP服務(wù)程序的的握手過程程。System.out.println("S:"+sockin.readLine());sockout.println("user"+POP3Demo.USERNAME);System.out.println("S:"+sockin.readLine());sockout.println("pass"+POP3Demo.PASSWORD);System.out.println("S:"+sockin.readLine());sockout.println("stat");22Stringtemp[]=sockin.readLine().split("");intcount=Integer.parseInt(temp[1]);//得到信箱中中共有多少少封郵件for(inti=1;i<count+1;i++){//依次打印印出郵件件的內(nèi)容容sockout.println("retr"+i);System.out.println("以下為第第"+i+"封郵件的的內(nèi)容");while(true){Stringreply=sockin.readLine();System.out.println(reply);if(reply.toLowerCase().equals(".")){break;}}}}catch(IOExceptione){System.out.println(e.toString());}finally{try{if(client!=null){client.close();}}catch(IOExceptione){}}}

}235FTP協(xié)議24251FTP協(xié)議體系系結(jié)構(gòu)FTP客戶端分分為三個(gè)個(gè)層次::用戶接口口UI(UserInterface)用戶協(xié)議議執(zhí)行器器PI(TheUserProtocolInterpreter)用戶數(shù)據(jù)據(jù)傳輸進(jìn)進(jìn)程DTP(TheUserDataTransferProcess);FTP服務(wù)器分分為兩個(gè)個(gè)層次::服務(wù)器協(xié)協(xié)議執(zhí)行行器PI(TheServerProtocolInterpreter)服務(wù)器數(shù)數(shù)據(jù)傳輸輸進(jìn)程DTP(TheServerDataTransferProcess)。26FTP客戶端與與服務(wù)器器傳輸模模型27FTP協(xié)議使用用兩個(gè)層層次的連連接:第一個(gè)層層次是由由兩個(gè)PI形成的控控制連接接是由用戶戶PI直接建立立的專用用于發(fā)送送FTP命令的連連接,向向服務(wù)器器PI提出查看看或下載載文件的的請求,,連接遵遵循Telnet協(xié)議,稱稱控制連連接;第二個(gè)層層次是由由DTP形成的數(shù)數(shù)據(jù)連接接由用戶PI發(fā)出數(shù)據(jù)據(jù)傳輸命命令,服服務(wù)器PI響應(yīng),并并控制服服務(wù)器DTP而建立的的專用于于傳遞數(shù)數(shù)據(jù)的連連接,稱稱數(shù)據(jù)連連接,它它響應(yīng)用用戶端的的請求把把指定的的文件傳傳送到客客戶端計(jì)計(jì)算機(jī)中中。一旦兩個(gè)個(gè)DTP之間數(shù)據(jù)據(jù)連接建建好,就就開始傳傳送數(shù)據(jù)據(jù)。這兩個(gè)層層次的連連接,也也是兩條條單獨(dú)的的基于雙雙工通信信鏈路的的TCP協(xié)議連接接。28FTP的主要命命令、格格式和描描述1、訪問控控制命令令命令格式描述USERUSER<SP><username><CRLF>系統(tǒng)登錄的用戶名PASSPASS<SP><password><CRLF>系統(tǒng)登錄的用戶密碼CWDCWD<SP><pathname><CRLF>改變服務(wù)器上的工作目錄,即切換目錄CDUPCDUP<CRLF>切換到上一層目錄QUITQUIT<CRLF>從FTP服務(wù)器上退出登錄29FTP的主要命命令、格格式和描描述2、傳輸參參數(shù)命令令:命令格式描述PORTPORT<SP><host-port><CRLF>IP地址和兩字節(jié)的端口ID(主動模式)TYPETYPE<SP><type-code><CRLF>數(shù)據(jù)類型(A=ASCII,E=EBCDIC,I=binary)STRUSTRU<SP><structure-code><CRLF>數(shù)據(jù)結(jié)構(gòu)(F=文件,R=記錄,P=頁面)MODEMODE<SP><mode-code><CRLF>傳輸模式(S=流模式,B=塊模式,C=壓縮模式)PASVPASV<CRLF>請求服務(wù)器等待數(shù)據(jù)連接(被動模式)30FTP的主要命命令、格格式和描描述3、FTP服務(wù)命令令命令格式描述RETRRETR<SP><pathname><CRLF>從服務(wù)器中獲得(找回)文件STORSTOR<SP><pathname><CRLF>向服務(wù)器中發(fā)送文件STOUSTOU<CRLF>存儲文件到服務(wù)器名稱上DELEDELE<SP><pathname><CRLF>刪除服務(wù)器上的指定文件LISTLIST[<SP><pathname>]<CRLF>如果是文件名列出文件信息,如果是目錄則列出文件列表RMDRMD<SP><pathname><CRLF>刪除指定文件夾MKDMKD<SP><pathname><CRLF>在服務(wù)器上建立指定目錄PWDPWD<CRLF>顯示(打?。┊?dāng)前工作目錄HELPHELP[<SP><string>]<CRLF>返回指定命令信息31FTP的部分應(yīng)應(yīng)答碼應(yīng)答碼描述150文件狀態(tài)正常,準(zhǔn)備打開數(shù)據(jù)連接200命令執(zhí)行成功220服務(wù)就緒,可以執(zhí)行新用戶的請求。如與服務(wù)器連接成功221服務(wù)關(guān)閉控制連接。如果適當(dāng),請注銷227進(jìn)入被動模式230用戶登錄成功,繼續(xù)進(jìn)行250目錄切換成功,已完成257已創(chuàng)建文件夾331用戶名正確,輸入密碼應(yīng)答碼描述350請求的文件操作正在等待進(jìn)一步的信息421服務(wù)不可用,正在關(guān)閉控制連接。如果服務(wù)確定它必須關(guān)閉,將向任何命令發(fā)送這一應(yīng)答425無法打開數(shù)據(jù)連接450請求的文件操作未執(zhí)行452未執(zhí)行請求的操作。系統(tǒng)存儲空間不夠500語法錯(cuò)誤,命令無法識別501在參數(shù)中有語法錯(cuò)誤502命令未實(shí)現(xiàn)530未登錄550未執(zhí)行請求的操作。文件不可用32.2FTP工作模式式(1)FTP協(xié)議有兩兩種工作作模式::它們使使用的端端口不同同,工作作流程也也不同。。Active模式:主主動方式式(PORT)命令通道道建立::客戶端端PI使用隨機(jī)機(jī)端口號號N呼叫服務(wù)務(wù)器PI的21端口(默默認(rèn))發(fā)發(fā)送連接接請求,,服務(wù)器器PI接收連接接,建立立一條控控制連接接,客戶戶端PI發(fā)送用戶戶名和密密碼進(jìn)行行身份認(rèn)認(rèn)證,確確認(rèn)后可可發(fā)送FTP的命令。。N端口要求求N>1024。數(shù)據(jù)連接接通道建建立:由命令通通道客戶戶端PI用PORT命令告知服務(wù)務(wù)器PI,客戶端端的“IP地址和已已打開M端口,可可連接””;服務(wù)務(wù)器PI接到命令令后,利利用20端口(默默認(rèn))向向客戶端端的M端口主動發(fā)送送連接請請求,服務(wù)器器DTP與客戶端端DTP建立一條條數(shù)據(jù)鏈鏈路來傳傳送數(shù)據(jù)據(jù),稱為主動動模式。M端口在1025~65535之間,隨隨機(jī)產(chǎn)生生。33.2FTP工作模式式(2)Passive模式:被被動方式式(PASV)命令通道道建立::同主動動方式;;數(shù)據(jù)連接接通道建建立:通通過命令令通道客客戶端PI發(fā)送PASV命令,告告訴服務(wù)務(wù)器要采采用被動動模式建建立連接接。當(dāng)服服務(wù)器PI接收命令令后,服服務(wù)器就就會自動動監(jiān)聽端端口M1被動等待待連接,,并利用用命令通通道告訴訴客戶端端PI“M1端口,可可連接””,客戶戶端在接接到此信信息后,,就會自自動選擇擇一個(gè)端端口M2,與服務(wù)務(wù)器DTP的M1端口建立立數(shù)據(jù)連連接通道道。對服服務(wù)器來來說數(shù)據(jù)據(jù)連接通通道DTP建立的過過程中,,是被動動等待連連接,稱稱為被動動模式。。M1和M2端口在1025~65535中隨機(jī)產(chǎn)產(chǎn)生。343服務(wù)器端端FTP程序35關(guān)鍵命令令1.主動模模式PORT(PORT)命令2.被動模模式PASV(PASSIVE)命令3.文件下下載RETR(RETEIEVE)和文件上上傳STOR(STORE)命令4.文件和和目錄列列表LIST(LIST)命令36HTTP協(xié)議371HTTP協(xié)議概述HTTP協(xié)議是一種靈靈活和迅速的的應(yīng)用于分布布式、協(xié)作、、超媒體信息息系統(tǒng)所需的的應(yīng)用層協(xié)議議。這是一個(gè)個(gè)通用、無狀態(tài)、面向?qū)ο蟮膮f(xié)議,通過過擴(kuò)展它的請請求方法(命命令)可用于于多種任務(wù)。。HTTP客戶以Web瀏覽器作為客客戶工具通過過HTTP協(xié)議向HTTP服務(wù)器請求超超文本文件,,而超文本文文件中包含著著超鏈接。HTTP服務(wù)器使得Internet成為超文本文文件的集合。。383940一個(gè)典型的<form><formmethod="post"name="loginForm"action=“/login“>用戶名:<inputname="username"><br>密

碼:<inputname="password"type="password"><br><inputtype="submit"value="提交"></form>瀏覽器與服務(wù)務(wù)器交互RequestResponse一個(gè)典型的Http請求POSThttp://download.microtool.de/loginHTTP/1.1Host:download.microtool.deAccept:*/*Pragma:no-cacheCache-Control:no-cacheReferer:http://download.microtool.de/User-Agent:Mozilla/4.04[en](Win95;I;Nav)Username=yuannan&password=111111HTTP請求剖析POSThttp://download.microtool.de/loginHTTP/1.1通過POST方法獲得指定定URL下的文件。除了POST方法以外,還還有GET,DEL,HEAD等等HTTP請求剖析Host:download.microtool.deHost:指定請求資資源的Intenet主機(jī)和端口號號,必須表示示請求url的原始服務(wù)器器或網(wǎng)關(guān)的位位置。HTTP/1.1請求必須包含含主機(jī)頭域,,否則系統(tǒng)會會以400狀態(tài)碼返回。。HTTP請求剖析username=yuannan&password=111111POST到服務(wù)器中的的數(shù)據(jù)。HTTP請求剖析User-Agent:Mozilla/4.04[en](Win95;I;Nav)User-Agent頭域的內(nèi)容包包含發(fā)出請求求的用戶信息息。典型的HTTP響應(yīng)HTTP響應(yīng)剖析HTTP/1.0200OK協(xié)議版本號,,狀態(tài)號HTTP響應(yīng)剖析Server:Apache/1.3.14(Unix)服務(wù)器的名稱稱,版本,以以及服務(wù)器所所在的操作系系統(tǒng)名稱HTTP響應(yīng)剖析Content-type:text/html相應(yīng)的內(nèi)容的的類型,html文本。。HTTP響應(yīng)剖剖析Last-modified:Tue,17Apr200106:46:28GMTEtag:"a030f020ac7c01:1e9f"Last-modified文件的的最后后修改改時(shí)間間,而而Etag則是以以及文文件內(nèi)內(nèi)容的的生成成的一一個(gè)字字符序序列。。通常常用于于實(shí)現(xiàn)現(xiàn)客戶戶端緩緩存,,降低低服務(wù)務(wù)器壓壓力。。當(dāng)客客戶端端發(fā)現(xiàn)現(xiàn)請求求并沒沒有被被修改改的話話則直直接使使用本本地的的緩存存。HTTP響應(yīng)剖剖析Content-length:39725426響應(yīng)內(nèi)內(nèi)容的的長度度,單單位為為Byte。HTTP響應(yīng)剖剖析觀察HTTP協(xié)議的的兩個(gè)個(gè)工具具HttpWatch,IE插件Ethereal,抓包工工具請求頭頭格式式a)通用頭頭(general-header):Cache-Control:客戶戶端希希望服服務(wù)端端如何何緩存存自己己的請請求數(shù)數(shù)據(jù),,如"Cache-Control:no-cache","Cache-Control:max-age=0";Connection:客戶戶端是是否希希望與與服務(wù)務(wù)端之之間保保持長長連接接,如如"Connection:close","Connection:keep-alive";Date:只有有當(dāng)請請求方方法為為POST或PUT方法時(shí)時(shí)客戶戶端才才可能能會有有些字字段;;Pragma:包含含了客客戶端端一些些特殊殊請求求信息息,如如"Pragma:no-cache"客戶端端希望望代理理或應(yīng)應(yīng)用服服務(wù)器器不應(yīng)應(yīng)緩存存與該該請求求相關(guān)關(guān)的結(jié)結(jié)果數(shù)數(shù)據(jù);;Via:一般般用在在代理理網(wǎng)關(guān)關(guān)向應(yīng)應(yīng)用服服務(wù)器器發(fā)送送的請請求頭頭中,,表明明該來來自客客戶端端的請請求經(jīng)經(jīng)過了了網(wǎng)關(guān)關(guān)代理理,格格式為為:"Via:請求協(xié)協(xié)議版版本網(wǎng)網(wǎng)關(guān)標(biāo)標(biāo)識[其它信信息]",如如::"Via:1.1webcache_250_199.:80(squid)"57請求頭頭格式式58請求頭頭格式式b)請求頭頭(request-header):Accept-Encoding:客戶戶端所所能識識別的的編碼碼壓縮縮格式式,如:““Accept-Encoding:gzip,deflate””;If-Modified-Since:該字字段與與客戶戶端緩緩存相相關(guān),,客戶戶端所所訪問問的URL自該指指定日日期以以來在在服務(wù)務(wù)端是是否被被修改改過,,如果果修改改過則則服務(wù)務(wù)端返返回新新的修修改后后的信信息,,如果果未修修改過過則服服務(wù)器器返回回304表明此此請求求所指指URL未曾修修改過過,如:““If-Modified-Since:Fri,2Sep200619:37:36GMT”;If-None-Match:該字字段與與客戶戶端緩緩存相相關(guān),,客戶戶端發(fā)發(fā)送URL請求的的同時(shí)時(shí)發(fā)送送該字字段及及標(biāo)識識,如如果服服務(wù)端端的標(biāo)標(biāo)識與與客戶戶端的的標(biāo)識識一致致,則則返回回304表明此此URL未修改改過,,如果果不一一致則則服務(wù)務(wù)端返返回完完整的的數(shù)據(jù)據(jù)信息息,如:““If-None-Match:0f0a893aad8c61:253,0f0a893aad8c61:252,0f0a893aad8c61:251”;Cookie:為擴(kuò)擴(kuò)展字字段,,存儲儲于客客戶端端,向向同一一域名名的服服務(wù)端端發(fā)送送屬于于該域域的cookie,如::““Cookie:MailUserName=whouse””;59請求求頭頭格格式式60響應(yīng)應(yīng)格格式式a)通用用頭頭(general-header):Cache-Control:服服務(wù)務(wù)端端要要求求中中間間代代理理及及客客戶戶端端如如何何緩緩存存自自己己響響應(yīng)應(yīng)的的數(shù)數(shù)據(jù)據(jù),,如““Cache-Control:no-cache””,如::““Cache-Control:private””不希希望望被被緩緩存存,,“Cache-Control:public””可以以被被緩緩存存;;Connection:服服務(wù)務(wù)端端是是否否希希望望與與客客戶戶端端之之間間保保持持長長連連接接,,如““Connection:close””,““Connection:keep-alive””;Date:只只有有當(dāng)當(dāng)請請求求方方法法為為POST或PUT方法法時(shí)時(shí)客客戶戶端端才才可可能能會會有有些些字字段段;;Pragma:包包含含了了服服務(wù)務(wù)端端一一些些特特殊殊響響應(yīng)應(yīng)信信息息,,如““Pragma:no-cache””服務(wù)務(wù)端端希希望望代代理理或或客客戶戶端端不不應(yīng)應(yīng)緩緩存存結(jié)結(jié)果果數(shù)數(shù)據(jù)據(jù);;Transfer-Encoding:服服務(wù)務(wù)端端向向客客戶戶端端傳傳輸輸數(shù)數(shù)據(jù)據(jù)所所采采用用的的傳傳輸輸模模式式(僅在在HTTP1.1中出出現(xiàn)現(xiàn)),如::““Transfer-Encoding:chunked””,注::該該字字段段的的優(yōu)優(yōu)先先級級要要高高于于““Content-Length””字段段的的優(yōu)優(yōu)先先級級;;61響應(yīng)應(yīng)格格式式62響應(yīng)應(yīng)格格式式c)實(shí)實(shí)體體頭頭(entity-header):(此類類頭頭存存在在時(shí)時(shí)要要求求有有數(shù)數(shù)據(jù)據(jù)體體)Content-Encoding:服服務(wù)務(wù)端端所所響響應(yīng)應(yīng)數(shù)數(shù)據(jù)據(jù)的的編編碼碼格格式式,,如::““Content-Encoding:gzip””;Content-Length:服服務(wù)務(wù)端端所所返返回回?cái)?shù)數(shù)據(jù)據(jù)的的數(shù)數(shù)據(jù)據(jù)體體部部分分的的內(nèi)內(nèi)容容長長度度,,如::““Content-Length:24””;Content-Type:服服務(wù)務(wù)端端所所返返回回的的數(shù)數(shù)據(jù)據(jù)體體的的內(nèi)內(nèi)容容類類型型,,如::““Content-Type:text/html;charset=gb2312””;Set-Cookie:服服務(wù)務(wù)端端返返回回給給客客戶戶端端的的cookie數(shù)據(jù)據(jù),,如::““Set-Cookie:ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55;path=/””63服務(wù)器返返回狀態(tài)態(tài)碼1xx:表明服服務(wù)端接接收了客客戶端請請求,客客戶端繼繼續(xù)發(fā)送送請求;;2xx:客戶端端發(fā)送的的請求被被服務(wù)端端成功接接收并成成功進(jìn)行行了處理理;3xx:服務(wù)端端給客戶戶端返回回用于重重定向的的信息;;4xx:客戶端端的請求求有非法法內(nèi)容;;5xx:服務(wù)端端未能正正常處理理客戶端端的請求求而出現(xiàn)現(xiàn)意外錯(cuò)錯(cuò)誤。舉例:“100””;服務(wù)端希希望客戶戶端繼續(xù)續(xù);““200””;服務(wù)端成成功接收收并處理理了客戶戶端的請請求;““301””;客戶端所所請求的的URL已經(jīng)移走走,需要要客戶端端重定向向到其它它的URL;

“304””;客戶端所所請求的的URL未發(fā)生變變化;““400””;客戶端請求錯(cuò)錯(cuò)誤;

“403”;客戶端請求被被服務(wù)端所禁禁止;

“404”;客戶端所請求求的URL在服務(wù)端不存存在;

“500”;服務(wù)端在處理理客戶端請求求時(shí)出現(xiàn)異常常;

“501”;服務(wù)端未實(shí)現(xiàn)現(xiàn)客戶端請求求的方法或內(nèi)內(nèi)容;

“502”;此為中間代理理返回給客戶戶端的出錯(cuò)信信息,表明服服務(wù)端返回給給代理時(shí)出錯(cuò)錯(cuò);

“503”;服務(wù)端由于負(fù)負(fù)載過高或其其它錯(cuò)誤而無無法正常響應(yīng)應(yīng)客戶端請求求;

“504”;此為中間代理理返回給客戶戶端的出錯(cuò)信信息,表明代代理連接服務(wù)務(wù)端出現(xiàn)超時(shí)時(shí)。6465GET請求GET/inc/global.jsHTTP/1.1Host:User-Agent:Mozilla/5.0(Windows;U;WindowsNT5.0;zh-CN;rv:1.8.1)Gecko/20061010Firefox/2.0Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language:en-us,zh-cn;q=0.7,zh;q=0.3Accept-Encoding:gzip,deflateAccept-Charset:gb2312,utf-8;q=0.7,*;q=0.7Keep-Alive:300Proxy-Connection:keep-aliveCookie:ASP.NET_SessionId=ey5drq45lsomio55hoydzc45Cache-Control:max-age=066POST請求67查看HTTP協(xié)議的執(zhí)行過過程Telnet遠(yuǎn)程終端程序序可以幫助我我們查看HTTP及其它協(xié)議的的詳細(xì)執(zhí)行情情況Telnet是TCP/IP協(xié)議要求的基基本應(yīng)用程序序(協(xié)議)Windows系統(tǒng)自身攜帶帶了Telnet程序進(jìn)入Windows的命令窗口程序->附件->命令提示符運(yùn)行->cmd退出Windows的命令窗口exit輸入telnet窗口進(jìn)入Telnet狀態(tài),給出telnet命令提示符68查看HTTP協(xié)議的執(zhí)行過過程微軟的Telnet程序用起來不不是很方便Telnet程序有許許多多多Cygwin中的Telnet為避免命令的的重命,將Cygwin中的telnet.exe程序改名為telnetc.exe該命令運(yùn)行時(shí)時(shí)需要cygwin1.dll動態(tài)連接庫的的支持建議:在硬盤上建立立一個(gè)子目錄錄(文件夾,telnetc),在其中放入cygwin1.dll和telnetc.exe程序在命令窗口口中,將當(dāng)前目錄錄轉(zhuǎn)到上述述子目錄X:轉(zhuǎn)到某個(gè)盤盤CD<子目錄>進(jìn)入下一級級子目錄CD..返回上一級級目錄CD..返回到根目目錄69查看HTTP協(xié)議的執(zhí)行行過程Telnet的常用命令令?獲取幫助Quit退出Open<主機(jī)名/IP><端口號>openlocalhost8070HTTPGET命令格式HTTP1.1GET命令格式GET/HTTP/1.1host:localhost兩次回車HTTP2.0GET命令格式GET/HTTP/2.0兩次回車瀏覽器隱藏藏了HTTP協(xié)議的執(zhí)行行細(xì)節(jié)瀏覽器使HTTP協(xié)議的執(zhí)行行對用戶是是透明的71HTTP1.1GET命令—獲取默認(rèn)主主頁72HTTP1.1GET命令—獲取默認(rèn)主主頁73示例主頁<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><title>最簡單的網(wǎng)網(wǎng)頁</title></head><bodybgColor=silver><h3>這是一個(gè)最最簡單的網(wǎng)網(wǎng)頁</h3><p><fontcolor=red>雖然這是一一個(gè)非常簡簡單的網(wǎng)頁頁,</font></p><hr><p>但是它依然然體現(xiàn)了<br>HTML網(wǎng)頁技術(shù)中中的一些深深刻原理。。</p></body></html>74HTTP1.1GET命令—獲取某個(gè)目目錄下的網(wǎng)網(wǎng)頁75HTTP1.1GET命令—出錯(cuò)信息76HTTP2.0GET命令執(zhí)行示示例77HTTP協(xié)議過程服務(wù)器:包括HTML文件,一個(gè)個(gè)HTTP駐留程序,,即服務(wù)器器程序,用用于響應(yīng)HTTP客戶請求。。瀏覽器:就是HTTP客戶,向服服務(wù)器發(fā)送送請求,當(dāng)當(dāng)瀏覽器中中輸入一個(gè)個(gè)開始文件件或單擊一一個(gè)超鏈接接時(shí),瀏覽覽器就向服服務(wù)器發(fā)送送了HTTP請求,此請請求被送往往由IP地址指定的的URL。程序接收到到請求,在在進(jìn)行必要要的操作后后回送所要要求的文件件。之前,,要建立HTTP客戶與HTTP服務(wù)器的連連接,默認(rèn)認(rèn)端口為80;之后,要要關(guān)閉連接接。HTTP協(xié)議的內(nèi)部操作作過程分為為4個(gè)過程:建立連接、、發(fā)送請求求信息、發(fā)發(fā)送響應(yīng)信信息和內(nèi)容容、關(guān)閉連連接。78HTTP協(xié)議兩個(gè)重點(diǎn)過過程1.HTTP客戶發(fā)送請請求信息完整請求=請求行(通用信息頭頭|請求頭|實(shí)體頭)CRLF[實(shí)體內(nèi)容]格式:Full-Request=Request-Line*(General-Header|Request-Header|Entity-Header)CRLF[Entity-Body]2.HTTP服務(wù)器發(fā)送送響應(yīng)信息息和內(nèi)容響應(yīng)消息=狀態(tài)行(通用信息頭頭|響應(yīng)頭|實(shí)體頭)CRLF[實(shí)體內(nèi)容]格式:Full-Response=Status-Line*(General-Header|Response-Header|Entity-Header)CRLF[Entity-Body]請求方式GET—客戶端請求求訪問服務(wù)務(wù)器上的一一個(gè)文檔;;(網(wǎng)頁))POST——客戶程序發(fā)發(fā)送大量信信息給服務(wù)務(wù)器。通常常包含大量量HTML表單數(shù)據(jù)。。HEAD——客戶端和服服務(wù)器之間間交流內(nèi)部部數(shù)據(jù);服服務(wù)器不會會返回具體體文檔。對對用戶透明明。PUT——客戶程序上上傳文檔給給服務(wù)器。。DELETE—客戶程序刪刪除服務(wù)器器上的某個(gè)個(gè)文檔。79HTTP協(xié)議主要依依靠的兩個(gè)個(gè)標(biāo)準(zhǔn)HTML(HypertextMarkupLanguage):超文本標(biāo)記記語言,其其文件稱為為HTML文檔;是一一個(gè)描述文文本數(shù)據(jù)語語義值的簡簡單標(biāo)準(zhǔn)。。MIME(MultipurposeInternetMailExtensions):多功能Internet郵件擴(kuò)充服服務(wù),是對對不同類型型的數(shù)據(jù)((如聲音和和文本)進(jìn)進(jìn)行編碼的的一種方法法。它將這這些數(shù)據(jù)在在一個(gè)7位ASCII連接上傳輸輸。Content-Type80極其簡單的的HTTP客戶//向::8080發(fā)送Http請求求Socketsocket=newSocket("","8080");OutputStreamos=socket.getOutputStream();booleanautoflush=true;PrintWriterout=newPrintWriter(socket.getOutputStream(),autoflush);BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));//sendanHTTPrequesttothewebserverout.println("GET/index.jspHTTP/1.1");out.println("Host:localhost:8080");out.println("Connection:Close");out.println();81極其簡單的的HTTP客戶//readtheresponsebooleanloop=true;StringBuffersb=newStringBuffer(8096);while(loop){if(in.ready()){inti=0;while(i!=-1){i=in.read();sb.append((char)i);}loop=false;}Thread.currentThread().sleep(50);}//displaytheresponsetotheoutconsoleSystem.out.println(sb.toString());socket.close();82簡單的HTTP服務(wù)器publicclassSimpleHttpServerimplementsRunnable{ServerSocketserverSocket;//服務(wù)器器Socket/***服務(wù)器器監(jiān)聽端口口,默認(rèn)認(rèn)為80.*/publicstaticintPORT=80;//標(biāo)準(zhǔn)HTTP端端口/***開始服服務(wù)器Socket線程程.*/publicSimpleHttpServer(){try{serverSocket=newServerSocket(PORT);}catch(Exceptione){System.out.println("無法啟啟動HTTP服務(wù)器器:"+e.getLocalizedMessage());}if(serverSocket==null)System.exit(1);//無無法開始始服務(wù)器newThread(this).start();System.out.println("HTTP服務(wù)器器正在運(yùn)行行,端口:"+PORT);}83/***運(yùn)行服務(wù)器器主線程,監(jiān)聽客戶端端請求并返返回響應(yīng).*/publicvoidrun(){while(true){try{Socketclient=null;//客戶SocketintcontentLength=0;//客戶戶端端發(fā)發(fā)送送的的HTTP請求求的的主主體體的的長長度度client=serverSocket.accept();//客戶戶機(jī)機(jī)(這里里是是IE等瀏瀏覽覽器器)已經(jīng)經(jīng)連連接接到到當(dāng)當(dāng)前前服服務(wù)務(wù)器器if(client!=null){System.out.println("連接接到到服服務(wù)務(wù)器器的的用用戶戶:"+client);try{//第一一階階段段:打開開輸輸入入流流BufferedReaderin=newBufferedReader(newInputStreamReader(client.getInputStream()));System.out.println("客戶戶端端發(fā)發(fā)送送的的請請求求信信息息:\n===================");//讀取取第第一一行行,請求求地地址址Stringline=in.readLine();System.out.println(line);Stringresource=line.substring(line.indexOf('/'),line.lastIndexOf('/')-5);//獲得得請請求求的的資資源源的的地地址址resource=URLDecoder.decode(resource,"UTF-8");//反編編碼碼URL地址址Stringmethod=newStringTokenizer(line).nextElement().toString();//獲取請求方法法,GET或者POST84//讀取所有瀏覽覽器發(fā)送過來來的請求參數(shù)數(shù)頭部信息while((line=in.readLine())!=null){System.out.println(line);//讀取POST等數(shù)據(jù)的內(nèi)容容長度if(line.startsWith("Content-Length")){try{contentLength=Integer.parseInt(line.substring(line.indexOf(':')+1).trim());}catch(Exceptione){e.printStackTrace();}}if(line.equals(""))break;}85//顯示示POST表單提交交的內(nèi)容,這這個(gè)內(nèi)容位位于請求的主主體部分if("POST".equalsIgnoreCase(method)&&contentLength>0){System.out.println("以下內(nèi)容容為POST方式提提交的表單數(shù)數(shù)據(jù)");for(inti=0;i<contentLength;i++){System.out.print((char)in.read());}System.out.println();}System.out.println("請求信息息結(jié)束\n===================");System.out.println("用戶請求求的資源是:"+resource);System.out.println("請求的類類型是:"+method);86//GIF圖片就就讀取一個(gè)真真實(shí)的圖片數(shù)數(shù)據(jù)并返回給給客戶端if(resource.endsWith(".gif")){fileService("images/test.gif",client);closeSocket(client);continue;}87

//請求JPG格式就報(bào)錯(cuò)404if(resource.endsWith(".jpg")){PrintWriterout=newPrintWriter(client.getOutputStream(),true);out.println("HTTP/1.0404Notfound");//返回應(yīng)答消息,并結(jié)束應(yīng)答

out.println();//根據(jù)HTTP協(xié)議,空行將結(jié)束頭信息

out.close();closeSocket(client);continue;}else{//用writer對客戶端socket輸出一段HTML代碼

PrintWriterout=newPrintWriter(client.getOutputStream(),true);out.println("HTTP/1.0200OK");//返回應(yīng)答消息,并結(jié)束應(yīng)答

out.println("Content-Type:text/html;charset=GBK");out.println();//根據(jù)HTTP協(xié)議,空行將結(jié)束頭信息

out.println("<h1>HelloHttpServer</h1>");out.println("你好,這是一個(gè)JavaHTTP服務(wù)器demo應(yīng)用.<br>");out.println("您請求的路徑是:"+resource+"<br>");out.println("這是一個(gè)支持虛擬路徑的圖片:<imgsrc='abc.gif'><br>"+"<ahref='abc.gif'>點(diǎn)擊打開abc.gif,是個(gè)服務(wù)器虛擬路徑的圖片文件.</a>");out.println("<br>這是個(gè)會反饋404錯(cuò)誤的的圖片:<imgsrc='test.jpg'><br><ahref='test.jpg'>點(diǎn)擊打開test.jpg</a><br>");out.println("<formmethod=postaction='/'>POST表單<inputname=usernamevalue='用戶'><inputname=submittype=submitvalue=submit></form>");out.close();closeSocket(client);}}catch(Exceptione){System.out.println("HTTP服務(wù)器錯(cuò)誤:"+e.getLocalizedM

溫馨提示

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

最新文檔

評論

0/150

提交評論