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