400-638-8808
|
微信公眾號(hào)








穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無(wú)阻

協(xié)同辦公 資源管理

超大郵件 超級(jí)功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

微信掃一掃 關(guān)注"天下數(shù)據(jù)"商品一律九折
![]()
搜索"朗玥科技"關(guān)注,了解最新優(yōu)惠

經(jīng)?吹紿TTP客戶端與服務(wù)器端交互原理的各種版本的文章,但是專業(yè)術(shù)語(yǔ)太多,且流程過(guò)于復(fù)雜,不容易消化。于是就按照在 Servlet 里面的內(nèi)容大致做了一些穿插。本來(lái)連 Tomcat 容器 和 Servlet 的生命周期也準(zhǔn)備在這里一起寫的,但怕過(guò)于龐大,于是就簡(jiǎn)單的引用了一些 Servlet 對(duì)象。這樣的一個(gè)整個(gè)流程看下來(lái),相信至少在理解 HTTP協(xié)議和 request 和 response 是如何完成從請(qǐng)求到生成響應(yīng)結(jié)果回發(fā)的。在后續(xù)的一些文章里會(huì)專門講一講 Tomcat 和 Servlet 是如何處理請(qǐng)求和完成響應(yīng)的,更多的是說(shuō)明Servlet 的生命周期。
HTTP介紹
1.HTTP是一種超文本傳送協(xié)議(HyperText Transfer Protocol),是一套計(jì)算機(jī)在網(wǎng)絡(luò)中通信的一種規(guī)則。在TCP/IP體系結(jié)構(gòu)中,HTTP屬于應(yīng)用層協(xié)議,位于TCP/IP協(xié)議的頂層。
2.HTTP是一種無(wú)狀態(tài)的協(xié)議,意思是指在Web 瀏覽器(客戶端)和 Web 服務(wù)器之間不需要建立持久的連接。整個(gè)過(guò)程就是當(dāng)一個(gè)客戶端向服務(wù)器端發(fā)送一個(gè)請(qǐng)求(request),然后Web服務(wù)器返回一個(gè)響應(yīng)(response),之后連接就關(guān)閉了,在服務(wù)端此時(shí)是沒(méi)有保留連接的信息。
3.HTTP 遵循請(qǐng)求/響應(yīng)(request/response)模型的,所有的通信交互都被構(gòu)造在一套請(qǐng)求和響應(yīng)模型中。
4.瀏覽Web時(shí),瀏覽器通過(guò)HTTP協(xié)議與Web服務(wù)器交換信息,Web服務(wù)器向Web瀏覽器返回的文件都有與之相關(guān)的類型,這些信息類型的格式由MIME定義。
HTTP定義的事務(wù)處理由以下四步組成:
1.建立連接。
2.客戶端發(fā)送HTTP請(qǐng)求頭。
3.服務(wù)器端響應(yīng)生成結(jié)果回發(fā)。
4.服務(wù)器端關(guān)閉連接,客戶端解析回發(fā)響應(yīng)頭,恢復(fù)頁(yè)面。
1.建立連接:以下用我的另一篇文章的地址做為例子
Servlet容器(Tomacat)介紹及配置
客戶端,也就是我請(qǐng)求一個(gè)地址時(shí),即打開(kāi)了到 Web 服務(wù)器的HTTP端口的一個(gè)套接字。因?yàn)樵诰W(wǎng)絡(luò)中間作為傳遞數(shù)據(jù)的實(shí)體介質(zhì)就是網(wǎng)線,數(shù)據(jù)實(shí)質(zhì)上是通過(guò)IO流進(jìn)行輸出和輸入,這就不難理解我們?yōu)槭裁丛趯懸粋(gè)Servlet的時(shí)候要引用 import java.io.*; 的原因,包括我們?cè)谙蚩蛻舳嘶匕l(fā)結(jié)果的時(shí)候要用到 PrintWriter 對(duì)象的println()方法。
比如我在這里請(qǐng)求CSDN社區(qū)的一個(gè)地址
實(shí)際上首先要請(qǐng)求這個(gè)地址,以及一個(gè)端口80(8080)http://blog.csdn.net:80 80可以不寫,是因?yàn)闉g覽器網(wǎng)頁(yè)服務(wù)默認(rèn)的端口號(hào)是 80.
在Java底層代碼中是這樣實(shí)現(xiàn)的,只不過(guò)它們已經(jīng)幫我們做了。
2.客戶端發(fā)送HTTP請(qǐng)求頭
一旦建立了TCP連接,Web瀏覽器就會(huì)向Web服務(wù)器發(fā)送請(qǐng)求命令,是一個(gè)ASCII文本請(qǐng)求行,后跟0個(gè)或多個(gè)HTTP頭標(biāo),一個(gè)空行和實(shí)現(xiàn)請(qǐng)求的任意數(shù)據(jù)。四個(gè)部分:請(qǐng)求行,請(qǐng)求頭標(biāo),空行和請(qǐng)求數(shù)據(jù)。
1)請(qǐng)求行由三個(gè)標(biāo)記組成:請(qǐng)求方法 請(qǐng)求URL HTTP版本,中間用空格分開(kāi)
HTTP規(guī)范定義了8種可能的請(qǐng)求方法:(最常見(jiàn)的就是 GET 和 POST 兩種方法)
GET 檢索URI中標(biāo)識(shí)資源的一個(gè)簡(jiǎn)單請(qǐng)求
HEAD 與GET方法相同,服務(wù)器只返回狀態(tài)行和頭標(biāo),并不返回請(qǐng)求文檔
POST 服務(wù)器接受被寫入客戶端輸出流中的數(shù)據(jù)的請(qǐng)求
PUT 服務(wù)器保存請(qǐng)求數(shù)據(jù)作為指定URI新內(nèi)容的請(qǐng)求
DELETE 服務(wù)器刪除URI中命名的資源的請(qǐng)求
OPTIONS 關(guān)于服務(wù)器支持的請(qǐng)求方法信息的請(qǐng)求
TRACE Web服務(wù)器反饋Http請(qǐng)求和其頭標(biāo)的請(qǐng)求
CONNECT 已文檔化但當(dāng)前未實(shí)現(xiàn)的一個(gè)方法,預(yù)留做隧道處理
2)請(qǐng)求頭標(biāo):由key :value 鍵值組成,每行一對(duì)。請(qǐng)求頭標(biāo)通知服務(wù)器有關(guān)客戶端的功能和標(biāo)識(shí)。
HOST 請(qǐng)求的哪一個(gè)服務(wù)器端地址,主地址 ,比如 我現(xiàn)在所在的CSDN blog.csdn.net/
User-Agent 用戶即客戶端可以使用的瀏覽器 ,如 : Mozilla/4.0
Accept 即客戶端可以接受的MIME 類型列表,如image/gif text/html, application/msword
Content-Length 只適用于POST請(qǐng)求,以字節(jié)給出POST數(shù)據(jù)的尺寸
3)空行 發(fā)送回車符和退行,通知服務(wù)器以下不再有頭標(biāo)。
4)請(qǐng)求數(shù)據(jù):使用POST傳送數(shù)據(jù),最常使用的是Content-Type和Content-Length頭標(biāo)。
總結(jié)以上 我們可以這樣寫出一個(gè)標(biāo)準(zhǔn)的 HTTP請(qǐng)求
這個(gè)頁(yè)面用的是 HTTP1.1 規(guī)范 我的瀏覽器版本是Mozilla/4.0
可以支持的MIME格式為 image/gif,text/html,application/pdf,image/png...等等
這個(gè)MIME格式我們r(jià)esponse.setContentType("text/html;charset=gb2312");或者在一個(gè) 或者總能見(jiàn)到
那么在這里如何理解 GET 和 POST 最直觀的區(qū)別,最明顯的就是 GET方法將數(shù)據(jù)的請(qǐng)求跟在了所請(qǐng)求的URL后面,也就是在請(qǐng)求行里面我們是這么樣來(lái)做的:
也實(shí)際上就是 用 GET 如此傳遞數(shù)據(jù) :
3.服務(wù)器端接受請(qǐng)求,處理數(shù)據(jù)后生成響應(yīng)返回?cái)?shù)據(jù)到客戶端 (部分Servlet 內(nèi)容穿插)
Web 服務(wù)器 解析請(qǐng)求,定位指定的資源
1)根據(jù)在 請(qǐng)求時(shí)的 GET/POST 來(lái)按照響應(yīng)的 doGet() /doPost()方法來(lái)處理(有可能是一些業(yè)務(wù)邏輯,也有可能是一些驗(yàn)證等等,也有可能是一些數(shù)據(jù)查詢,提交等等)其有效的數(shù)據(jù)就來(lái)源于name=simon&password=simonlv,還有其它的一些封裝在 request 對(duì)象中的數(shù)據(jù)資源。
2)處理請(qǐng)求之后,由 respons
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國(guó)服務(wù)器 韓國(guó)服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺(tái)灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國(guó)云主機(jī) 韓國(guó)云主機(jī) 新加坡云主機(jī) 臺(tái)灣云主機(jī) 日本云主機(jī) 德國(guó)云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無(wú)限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號(hào)
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠(chéng)聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊(cè) 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國(guó)服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證》 ISP證:粵ICP備07026347號(hào)
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營(yíng))聯(lián)合版權(quán)
深圳總部:中國(guó).深圳市南山區(qū)深圳國(guó)際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號(hào)建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊(cè)業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品