其實開始學技術也好久了,一直想好好寫博客,寫讀書筆記,可是一直沒有開始,可能是因為自己太懶了吧。終於到了大四了,有時間真正靜下心來好好的沉淀學習,希望這是一個好的開始,要堅持下去!
關於http的種種
http是什么?http這個協議與我們每天的網絡生活都息息相關,那么http協議究竟是個神馬東西呢,之前一直在做web開發,可以說一直在和網絡打交道。可以從來沒認真的研究過http的概念。
首先,http使用的是可靠地數據傳輸協議,因此它能夠確保數據在傳輸過程中不發生混亂。所以我們在web開發過程中不需要擔心網絡本身存在的一些問題,專心的進行程序開發。
那么http是如何工作的呢,簡單的來說就是客戶端(最常見的也就是我們現在用的瀏覽器)向服務器發送http請求,服務器接收到http服務器請求后會在http響應中回送所請求的數據。在這個簡單的過程中,有幾點引起我的思考,http的內容請求結構如何,請求如何找到發送目標,請求如何被解析等等。
下面寫介紹一些基本的概念:
資源:web服務器是web資源的宿主。web資源就是服務器系統中的文件,當然文件的形式多種多樣,如html,txt等等。但是資源也可以不是靜態的,還可以是動態生成的,如生成的動態天氣,實時股票情況等。
媒體類型:網絡上數千種不同的媒體類型,那么當數據傳送過來的時候,接收端如何識別這個數據是html還是txt呢?這就需要MIME類型標記了,MIME這個東西在開發的時候不太容易見得到,但是遇到了就可能比較麻煩,記得又一次一個網站要做一個TXT的下載功能,使用的是直接點擊超鏈接,但是這樣做的話就變成客戶端直接打開TXT文件的形式了,結果糾結了好久才發現是MIME和瀏覽器支持類型在做怪。回到正題,先讓我們講講MIME的歷史(我比較喜歡看歷史 (¯﹃¯))。
(MIME(multipurpose internet mail extension,多用途因特網郵件擴展)看名字就知道這東西原來是給email用的,后來http協議借過來發現“嗯!非常好用!”,結果就一直沿用下來了,他最初的目標是為了解決在不同的電子郵件系統間搬移報文時存在的問題)
web服務器會為所有的http對象數據加一個MIME類型,例如這個,當瀏覽器從服務器取回一個對象時候,回去查看這個對象的MIME類型,以此來作為決定如何處理該對象的參考,即如果是html我就顯示網頁,如果是音頻,我就播放音頻等等。MIME種類很多,需要的時候可以去查一下。
URI(uniform resource identifier,統一資源標示符):要找到一個人就要知道他的名字,網絡資源也是如此,每個web服務器資源都會有個名字,就是URI。
http://www.baidu.com/img/baidu_sylogo1.gif 這是百度首頁的logo的URI,給定了URI,http就可以解析出對象了。URI有兩種形式,分別為URL和URN,我們分別來看這兩種形式:
URL(統一資源定位符):是最常見的資源標識符形式,URL描述了一台特定服務器上的某資源的特定位置。它可以用來從一個精確,固定的位置獲取資源。
大部分URL都遵循一種標准格式,這個格式包含三個部分:
- URL的第一部分被稱為方案(scheme),這表明了訪問資源所使用的資源類型,這部分通常就是http(http://)。
- 第二部分給出服務器的因特網地址(如www.baidu.com)。
- 其余部分制定了服務器上的某個資源(如/img/baidu_sylogo1.gif)
URN(統一資源名):URN作為特定內容唯一名稱使用的,與目前的資源所在無關(這個厲害)。使用這些與位置無關的URN,就可以將資源四處搬移。這個
仍處於試驗階段。
事務:讓我們來看看HTTP的過程。一個http事務由一條從客戶端發往服務器的請求命令和一個從服務器發回客戶端的響應結果組成。這種通信是通過名為 http報文的格式化數據塊進行的。
方法:支持幾種不同的請求命令,這些命令被稱為http方法,每個http報文都包含一個方法,這個告訴服務器要做什么(是否只有發送報文才會有方法?根據觀察貌似是這樣)。常見的五種方法:GET,PUT,DELETE,POST,HEAD。
狀態碼:這個對於我們來說可以說是做熟悉的了,例如404等等。每條HTTP響應報文成功返回時都會攜帶一個狀態碼。狀態碼是一個三位數字的代碼,告知服務器的響應結果狀態,或者需要采取其他的行動。具體要查看有哪些狀態碼隨時去網上查找,有很多相關的資料。
web頁面中可以包含多個對象,完成一項任務時候通常會發布多個http事務。
報文:是由一行一行的簡單字符串構成的。http報文都是純文本,不是二進制代碼。
從web客戶端發往服務器的http報文為請求報文(request message)。
從服務器發往客戶端的報文為響應報文(response message)
請求報文:
響應報文:
HTTP報文包括一下三個部分:
- 起始行 :就是報文的第一行,在請求報文中說明要做什么,在響應報文中說明返回的情況。
- 首部字段:起始行后面有零到多個首部字段,為key-value值,key:value 的形式,以一個空行結束首部。
- 主體:空行之后就是報文主體,包含了所有的數據。
代理:它處於客戶端與服務器中間,他是干什么的呢?首先他接收所有客戶端的http請求,然后把這些請求轉發給服務器,當然代理有可能會對這些請求進行修改。
緩存:是一種特殊的HTTP代理服務器,他可以將經過代理傳送的常用文檔復制保存起來。下個請求就可以直接利用這個緩存中的副本咯。他的好處就是,客戶端從比 較近的緩存下載比從服務器下載速度提高很多,同時也降低了服務器負載。
網關:是一種特殊的服務器,作為其他服務器的中間實體使用。作用是協議的轉換。
隧道:隧道是建立起來后,就會在兩條連接之間對原始數據進行盲轉發的HTTP程序。
HTTP隧道的一種常見的用途是通過HTTP連接承載加密的安全套接字層(SSL,secure socket layer)流量,這樣SSL流量就可以穿過只允許web流量通過的防火牆 了。
Agent代理
是代表用戶發起HTTP請求的客戶端程序。所有發布web請求的應用程序都是HTTP Agent代理,我們接觸最多的就是web瀏覽器了。
第一章的筆記就先這些了,在2012的最后幾分鍾寫完了第一篇博客,希望明年也好加油學習,大家2013新年快樂~