摘要:是一個(gè)基于通信協(xié)議來傳遞數(shù)據(jù)的無狀態(tài)協(xié)議,且其是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議。以上所述可以理解成一個(gè)完整的請(qǐng)求及響應(yīng)過程,其中還涉及到解析域名三次握手等細(xì)節(jié),因?yàn)楸酒恼轮饕榻B就不做詳細(xì)講解感興趣的同學(xué)可以去研究下。
HTTP是一個(gè)基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)的無狀態(tài)協(xié)議,且其是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議。說到應(yīng)用層,引一下《計(jì)算機(jī)網(wǎng)絡(luò)》里邊的內(nèi)容,在家沒有翻到這本書才想起來給忘帶了過來,真是后悔大學(xué)里沒有把這些基礎(chǔ)掌握扎實(shí)啊。(掌握一些基礎(chǔ)知識(shí)有百益而無一害,而且計(jì)算機(jī)方面知識(shí)都是互通的,不分到具體某個(gè)領(lǐng)域,就像是《計(jì)算機(jī)基礎(chǔ)》這本書,雖說沒有重要的知識(shí)要領(lǐng)掌握,但這是一本決定你層次高低的標(biāo)桿,就是因?yàn)槠鋬?nèi)容很多涉及到計(jì)算機(jī)底層原理的知識(shí))TCP/IP網(wǎng)絡(luò)通信模型總共分為四層如下所示:
TCP/IP網(wǎng)絡(luò)通信模型 |
---|
應(yīng)用層-Application layer(HTTP,F(xiàn)TP,DNS...) |
傳輸層-Transport layer (TCP,UDP,RTP...) |
網(wǎng)絡(luò)層-Internet layer (IP,ICMP,AKP...) |
網(wǎng)絡(luò)接入層-Link layer(IEEE 802.1A,F(xiàn)DDI,Ethernet...) |
而HTTP就是基于其中應(yīng)用層的一套協(xié)議,該層包括所有和應(yīng)用程序協(xié)同工作,利用基礎(chǔ)網(wǎng)絡(luò)交換應(yīng)用程序?qū)S玫臄?shù)據(jù)的協(xié)議(來自維基百科),例如表格中列舉的一樣,感興趣的同學(xué)可以自己研究下,本篇主要討論一下http協(xié)議。言歸正傳,HTTP協(xié)議工作在客戶端-服務(wù)端之間,瀏覽器作為HTTP客戶端通過URL向WEB服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接收到來自客戶端(瀏覽器)的請(qǐng)求后會(huì)返回響應(yīng)信息,就是簡單的“請(qǐng)求-應(yīng)答”模式但是為什么說http協(xié)議是無狀態(tài)的?找了些資料大概是這樣解釋的:
協(xié)議對(duì)于事務(wù)處理沒有記憶能力
對(duì)同一個(gè)url請(qǐng)求沒有上下文關(guān)系
每次的請(qǐng)求都是獨(dú)立的,它的執(zhí)行情況和結(jié)果與前面的請(qǐng)求和之后的請(qǐng)求是無直接關(guān)系的,它不會(huì)受前面的請(qǐng)求應(yīng)答情況直接影響,也不會(huì)直接影響后面的請(qǐng)求應(yīng)答情況
服務(wù)器中沒有保存客戶端的狀態(tài),客戶端必須每次帶上自己的狀態(tài)去請(qǐng)求服務(wù)器
以上幾點(diǎn)中的關(guān)鍵詞已經(jīng)加粗,做重點(diǎn)理解,這時(shí)可以拋出一個(gè)最恰當(dāng)?shù)膯栴}:既然HTTP是無狀態(tài)的,那keep-alive的值意義何在?其實(shí)keep-alive就是為了讓客戶端和服務(wù)端保持一種持久的連接聯(lián)系,這樣也是為了減少請(qǐng)求/響應(yīng)的開銷,提高性能,但這并不意味著請(qǐng)求頭中有了這個(gè)參數(shù),HTTP就不是無狀態(tài)的協(xié)議了,其本身仍是無狀態(tài)的協(xié)議,而且無狀態(tài)指的是在應(yīng)用層這個(gè)層次上服務(wù)器沒有保存客戶端的狀態(tài)信息,ok說到這里也是時(shí)候搞一搞cookie和session了,兩者都是客戶端和服務(wù)端通信的介質(zhì),簡而言之,cookie是客戶端的存儲(chǔ)空間,由瀏覽器來維持,其采用的是在客戶端保持狀態(tài)的方案,而session機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案。有些時(shí)候由于服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè)標(biāo)識(shí),所以session機(jī)制可能需要借助于cookie機(jī)制來達(dá)到保存標(biāo)識(shí)的目的。(近期做的一個(gè)項(xiàng)目讓我意識(shí)到了自己的知識(shí)窄區(qū)例如session/http相關(guān)知識(shí),以前只是知道并沒有深入了解,個(gè)人覺得在某些專業(yè)領(lǐng)域還是要拋棄不求甚解的思想,有時(shí)候鉆個(gè)牛角尖也會(huì)有額外的收獲)重點(diǎn)來了,雖然cookie和session都可以保存狀態(tài),還有keep-alive持久連接,但是,但是,但是它們并沒有改變HTTP本身無狀態(tài)這一點(diǎn),因?yàn)檫@些辦法只是在幫助客戶端和服務(wù)端建立一套更好的協(xié)作通信關(guān)系,以提高通信和開發(fā)效率。
HTTP主要通過URI來傳輸數(shù)據(jù)和建立來建立連接,這里的URI(Uniform Resource Identifier)指的是統(tǒng)一資源標(biāo)識(shí)符,不同于URL(Uniform Resource Locator),其指的是統(tǒng)一資源定位符,兩者的關(guān)系可以理解為URL是一個(gè)特殊類型且具體的URI,一個(gè)URL里包含了用于查找某個(gè)資源的足夠信息。就隨便拿一個(gè)地址舉例子來說:
http://www.google.com:7001/signContract?apptoken=jksldjflkdjslkfjds&contractId=110&orderId=911#user
從這個(gè)URL我們可以看出里邊的參數(shù)包含一下幾項(xiàng):
協(xié)議部分:‘http:’這代表網(wǎng)頁使用的是http協(xié)議,在‘http’后面的‘//’為分割符,此外還有HTTPS、FTP協(xié)議,BTW,一個(gè)域名下不建議同時(shí)摻雜http和https的鏈接,這樣會(huì)導(dǎo)致出現(xiàn)混合內(nèi)容,對(duì)網(wǎng)站安全造成威脅,例如之前神策埋點(diǎn)的鏈接就造成類似問題。具體關(guān)于混合內(nèi)容涉及到we端安全方面的知識(shí),感興趣的同學(xué)可以去了解下,我也是無意中一個(gè)朋友問到這個(gè)問題才去了解的,多了解下有害無益嘛。
域名部分:該地址的域名為“www.google.com”,一個(gè)URL中也可以使用IP地址作為域名使用,比如使用這個(gè)IP也可以打開百度首頁(渣渣): 202.108.22.5,至于為什么,感興趣的同學(xué)可以去了解下DNS(Domain Name System)。
端口:“7001”域名后面冒號(hào)(:)緊跟著的是端口,可以省略,如果省略的話會(huì)采用瀏覽器的默認(rèn)端口即80。
目錄路徑:從端口號(hào)開始的第一個(gè)“/”開始到最后一個(gè)“/”,這之間是目錄部分,例如“signContract”。
參數(shù)部分:從“?”開始到“#”為止之間的部分是參數(shù),多個(gè)參數(shù)用“&”連接,此例中的參數(shù)是
“apptoken=jksldjflkdjslkfjds&contractId=110&orderId=911”
錨:從“#”開始到最后是錨部分,小融租項(xiàng)目里沒有使用到錨點(diǎn)部分,這里示例只做講解。參數(shù)可省略。
至于http狀態(tài)碼、請(qǐng)求及響應(yīng)相關(guān)的東西就不做詳解了,這里個(gè)人覺得有必要再梳理一下http的工作原理。首先客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求報(bào)文中包含請(qǐng)求的方法、url、協(xié)議版本、請(qǐng)求頭部、請(qǐng)求數(shù)據(jù),服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯(cuò)誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。以下是http請(qǐng)求響應(yīng)的步驟:
客戶端連接到web服務(wù)器:通常是從瀏覽器地址欄進(jìn)入,建立一個(gè)TCP套接字連接,例如:“https://www.google.com/”
發(fā)送HTTP請(qǐng)求:通過TCP套接字,客戶端向web服務(wù)器發(fā)送一個(gè)文本的請(qǐng)求報(bào)文,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)4部分組成。
服務(wù)器接受請(qǐng)求并返回http響應(yīng):web服務(wù)器解析請(qǐng)求,定位請(qǐng)求資源。返回給客戶端讀取。
釋放連接:若connection為close,則服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端被動(dòng)關(guān)閉連接,釋放TCP連接;若connection為keep-alive,則該連接會(huì)保持一段時(shí)間。
客戶端瀏覽器解析HTML內(nèi)容:客戶端瀏覽器首先解析狀態(tài)行,查看表明請(qǐng)求是否成功的狀態(tài)代碼。然后解析響應(yīng)頭,響應(yīng)頭告知一下為若干字節(jié)的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML,并在瀏覽器渲染。
以上所述可以理解成一個(gè)完整的請(qǐng)求及響應(yīng)過程,其中還涉及到DNS解析域名、TCP三次握手等細(xì)節(jié),因?yàn)楸酒恼轮饕榻BHTTP就不做詳細(xì)講解(感興趣的同學(xué)可以去研究下)。關(guān)于HTTP相關(guān)知識(shí)點(diǎn)是我最近接觸到的,所以總結(jié)一下加深自己的印象,文中若有歧義或是不正確的地方還望不吝指正,不過要想把HTTP整個(gè)吃透還相差甚遠(yuǎn),畢竟上周在公交車上看到個(gè)人拿了一本《圖解HTTP》,想想真的是學(xué)海無涯,就如那句hello-world所說,打開了新世界的大門,而且這個(gè)新world還有很多東西需要探索,這時(shí)就要告訴自己:Keep going and never stop !
在這里非常感謝維基百科以及以下鏈接作者的解惑,向大佬看齊【敬禮!】
http://www.jianshu.com/p/80e2...
http://www.cnblogs.com/bellko...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88373.html
摘要:開發(fā)趨勢三戴爾合并將是一個(gè)災(zāi)難大規(guī)模并購幾乎從來沒有真正解決實(shí)現(xiàn),所以通過預(yù)測曲線。戴爾為支付一筆龐大的收購資金,但是這并不能解決真正問題,戰(zhàn)略再也不能回頭了。 從容器到NoSQL再到Spark,這些趨勢在可預(yù)計(jì)的2016年還會(huì)持續(xù)下去。我的預(yù)測主要針對(duì)大數(shù)據(jù)范疇,但我試圖嘗試突破自己,僅供參考。 開發(fā)趨勢一:容器將統(tǒng)治世界 Docker將繼續(xù)發(fā)展,并獲得安全特性,而且添加各種形式的治...
摘要:華為說應(yīng)屆生招聘已經(jīng)結(jié)束了。我進(jìn)入華為之后,要定崗,一般大家都愿意去市場部,因?yàn)槿A為最強(qiáng)的是市場部。我非常驚訝,因?yàn)闉榱吮苊膺@樣的事情,在簡歷里我只字未提在華為的測試經(jīng)歷。 非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/72226 段念,現(xiàn)任豆瓣工程副總裁,曾在Google,樂元互動(dòng),OpenTV等公司...
摘要:離創(chuàng)業(yè)結(jié)束已經(jīng)有一段時(shí)間,在剛剛結(jié)束的時(shí)候,就想復(fù)盤下這段經(jīng)歷,但怕當(dāng)時(shí)的自己可能不夠客觀,就想著調(diào)整一段時(shí)間后,再來記錄,結(jié)果一拖到現(xiàn)在。別光想著成功,如果失敗了,你是否能接受補(bǔ)充一點(diǎn),很多大廠不喜歡員工有創(chuàng)業(yè)經(jīng)歷。離創(chuàng)業(yè)結(jié)束已經(jīng)有一段時(shí)間,在剛剛結(jié)束的時(shí)候,就想復(fù)盤下這段經(jīng)歷,但怕當(dāng)時(shí)的自己可能不夠客觀,就想著調(diào)整一段時(shí)間后,再來記錄,結(jié)果一拖到現(xiàn)在。前年11月份這個(gè)時(shí)候,沒經(jīng)過多少心里...
摘要:原始的開發(fā)模式已經(jīng)滿足不了呈指數(shù)增長的需求了。它承擔(dān)起了模塊管理這一重要角色。是個(gè)前端小菜鳥,接觸前端不到兩年時(shí)間,去年畢業(yè)正式參加工作。目前就職于杭州邊鋒網(wǎng)絡(luò)神盾局就是這么霸氣。 對(duì)于剛進(jìn)入前端領(lǐng)域的人,特別是還處于小白階段的初學(xué)者來說,很多人對(duì) webpack 并不熟知。就像 Light (對(duì),我就是 Light)一樣,剛接觸前端,最關(guān)心的就是樣式和簡單的交互了。那時(shí)候怎么會(huì)知道像...
閱讀 3571·2021-11-12 10:36
閱讀 2971·2021-09-22 15:35
閱讀 2894·2021-09-04 16:41
閱讀 1250·2019-08-30 15:55
閱讀 3652·2019-08-29 18:43
閱讀 2140·2019-08-23 18:24
閱讀 1482·2019-08-23 18:10
閱讀 1979·2019-08-23 11:31