網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程HTTP協(xié)議入門_第1頁(yè)
網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程HTTP協(xié)議入門_第2頁(yè)
網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程HTTP協(xié)議入門_第3頁(yè)
網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程HTTP協(xié)議入門_第4頁(yè)
網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程HTTP協(xié)議入門_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、網(wǎng)頁(yè)開發(fā)基礎(chǔ)教程 HTTP 協(xié)議入門HTTP 協(xié)議是互聯(lián)網(wǎng)的基礎(chǔ)協(xié)議,也是網(wǎng)頁(yè)開發(fā)的必備知識(shí),最新版本 HTTP/2 更是讓它成為技術(shù)熱點(diǎn)。本文介紹 HTTP 協(xié)議的歷史演變和設(shè)計(jì)思路。一、HTTP/0.9HTTP 是基于 TCP/IP 協(xié)議的應(yīng)用層協(xié)議。它不涉及數(shù)據(jù)包(packet)傳輸,主要規(guī)定了客戶端和服務(wù)器之間的通信格式,默認(rèn)使用80端口。最早版本是1991年發(fā)布的0.9版。該版本極其簡(jiǎn)單,只有一個(gè)命令GET。GET /index.html上面命令表示,TCP 連接(connection)建立后,客戶端向服務(wù)器請(qǐng)求(request)網(wǎng)頁(yè)index.html。協(xié)議規(guī)定,服務(wù)器只能回應(yīng)HT

2、ML格式的字符串,不能回應(yīng)別的格式。Hello World服務(wù)器發(fā)送完畢,就關(guān)閉TCP連接。二、HTTP/1.02.1 簡(jiǎn)介1996年5月,HTTP/1.0 版本發(fā)布,內(nèi)容大大增加。首先,任何格式的內(nèi)容都可以發(fā)送。這使得互聯(lián)網(wǎng)不僅可以傳輸文字,還能傳輸圖像、視頻、二進(jìn)制文件。這為互聯(lián)網(wǎng)的大發(fā)展奠定了基礎(chǔ)。其次,除了GET命令,還引入了POST命令和HEAD命令,豐富了瀏覽器與服務(wù)器的互動(dòng)手段。再次,HTTP請(qǐng)求和回應(yīng)的格式也變了。除了數(shù)據(jù)部分,每次通信都必須包括頭信息(HTTP header),用來描述一些元數(shù)據(jù)。其他的新增功能還包括狀態(tài)碼(status code)、多字符集支持、多部分發(fā)送(

3、multi-part type)、權(quán)限(authorization)、緩存(cache)、內(nèi)容編碼(content encoding)等。2.2 請(qǐng)求格式下面是一個(gè)1.0版的HTTP請(qǐng)求的例子。1 / 8GET / HTTP/1.0User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)Accept: */*可以看到,這個(gè)格式與0.9版有很大變化。第一行是請(qǐng)求命令,必須在尾部添加協(xié)議版本(HTTP/1.0)。后面就是多行頭信息,描述客戶端的情況。2.3 回應(yīng)格式服務(wù)器的回應(yīng)如下。HTTP/1.0 200 OK Content-Typ

4、e: text/plainContent-Length: 137582Expires: Thu, 05 Dec 1997 16:00:00 GMTLast-Modified: Wed, 5 August 1996 15:55:28 GMTServer: Apache 0.84Hello World回應(yīng)的格式是頭信息 + 一個(gè)空行(rn) + 數(shù)據(jù)。其中,第一行是協(xié)議版本 + 狀態(tài)碼(status code) + 狀態(tài)描述。2.4 Content-Type 字段關(guān)于字符的編碼,1.0版規(guī)定,頭信息必須是 ASCII 碼,后面的數(shù)據(jù)可以是任何格式。因此,服務(wù)器回應(yīng)的時(shí)候,必須告訴客戶端,數(shù)據(jù)是什么

5、格式,這就是Content-Type字段的作用。下面是一些常見的Content-Type字段的值。text/plaintext/htmltext/cssimage/jpegimage/pngimage/svg+xmlaudio/mp4video/mp4application/javascriptapplication/pdfapplication/zipapplication/atom+xml這些數(shù)據(jù)類型總稱為MIME type,每個(gè)值包括一級(jí)類型和二級(jí)類型,之間用斜杠分隔。除了預(yù)定義的類型,廠商也可以自定義類型。application/vnd.debian.binary-package上面的

6、類型表明,發(fā)送的是Debian系統(tǒng)的二進(jìn)制數(shù)據(jù)包。MIME type還可以在尾部使用分號(hào),添加參數(shù)。Content-Type: text/html; charset=utf-8上面的類型表明,發(fā)送的是網(wǎng)頁(yè),而且編碼是UTF-8??蛻舳苏?qǐng)求的時(shí)候,可以使用Accept字段聲明自己可以接受哪些數(shù)據(jù)格式。Accept: */*上面代碼中,客戶端聲明自己可以接受任何格式的數(shù)據(jù)。MIME type不僅用在HTTP協(xié)議,還可以用在其他地方,比如HTML網(wǎng)頁(yè)。2.5 Content-Encoding 字段由于發(fā)送的數(shù)據(jù)可以是任何格式,因此可以把數(shù)據(jù)壓縮后再發(fā)送。Content-Encoding字段說明數(shù)據(jù)的

7、壓縮方法。Content-Encoding: gzipContent-Encoding: compressContent-Encoding: deflate客戶端在請(qǐng)求時(shí),用Accept-Encoding字段說明自己可以接受哪些壓縮方法。Accept-Encoding: gzip, deflate2.6 缺點(diǎn)HTTP/1.0 版的主要缺點(diǎn)是,每個(gè)TCP連接只能發(fā)送一個(gè)請(qǐng)求。發(fā)送數(shù)據(jù)完畢,連接就關(guān)閉,如果還要請(qǐng)求其他資源,就必須再新建一個(gè)連接。TCP連接的新建成本很高,因?yàn)樾枰蛻舳撕头?wù)器三次握手,并且開始時(shí)發(fā)送速率較慢(slow start)。所以,HTTP 1.0版本的性能比較差。隨著網(wǎng)頁(yè)

8、加載的外部資源越來越多,這個(gè)問題就愈發(fā)突出了。為了解決這個(gè)問題,有些瀏覽器在請(qǐng)求時(shí),用了一個(gè)非標(biāo)準(zhǔn)的Connection字段。Connection: keep-alive這個(gè)字段要求服務(wù)器不要關(guān)閉TCP連接,以便其他請(qǐng)求復(fù)用。服務(wù)器同樣回應(yīng)這個(gè)字段。Connection: keep-alive一個(gè)可以復(fù)用的TCP連接就建立了,直到客戶端或服務(wù)器主動(dòng)關(guān)閉連接。但是,這不是標(biāo)準(zhǔn)字段,不同實(shí)現(xiàn)的行為可能不一致,因此不是根本的解決辦法。三、HTTP/1.11997年1月,HTTP/1.1 版本發(fā)布,只比 1.0 版本晚了半年。它進(jìn)一步完善了 HTTP 協(xié)議,一直用到了20年后的今天,直到現(xiàn)在還是最流行

9、的版本。3.1 持久連接1.1 版的最大變化,就是引入了持久連接(persistent connection),即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用,不用聲明Connection: keep-alive??蛻舳撕头?wù)器發(fā)現(xiàn)對(duì)方一段時(shí)間沒有活動(dòng),就可以主動(dòng)關(guān)閉連接。不過,規(guī)范的做法是,客戶端在最后一個(gè)請(qǐng)求時(shí),發(fā)送Connection: close,明確要求服務(wù)器關(guān)閉TCP連接。Connection: close目前,對(duì)于同一個(gè)域名,大多數(shù)瀏覽器允許同時(shí)建立6個(gè)持久連接。3.2 管道機(jī)制1.1 版還引入了管道機(jī)制(pipelining),即在同一個(gè)TCP連接里面,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求。

10、這樣就進(jìn)一步改進(jìn)了HTTP協(xié)議的效率。舉例來說,客戶端需要請(qǐng)求兩個(gè)資源。以前的做法是,在同一個(gè)TCP連接里面,先發(fā)送A請(qǐng)求,然后等待服務(wù)器做出回應(yīng),收到后再發(fā)出B請(qǐng)求。管道機(jī)制則是允許瀏覽器同時(shí)發(fā)出A請(qǐng)求和B請(qǐng)求,但是服務(wù)器還是按照順序,先回應(yīng)A請(qǐng)求,完成后再回應(yīng)B請(qǐng)求。3.3 Content-Length 字段一個(gè)TCP連接現(xiàn)在可以傳送多個(gè)回應(yīng),勢(shì)必就要有一種機(jī)制,區(qū)分?jǐn)?shù)據(jù)包是屬于哪一個(gè)回應(yīng)的。這就是Content-length字段的作用,聲明本次回應(yīng)的數(shù)據(jù)長(zhǎng)度。Content-Length: 3495上面代碼告訴瀏覽器,本次回應(yīng)的長(zhǎng)度是3495個(gè)字節(jié),后面的字節(jié)就屬于下一個(gè)回應(yīng)了。在1.0

11、版中,Content-Length字段不是必需的,因?yàn)闉g覽器發(fā)現(xiàn)服務(wù)器關(guān)閉了TCP連接,就表明收到的數(shù)據(jù)包已經(jīng)全了。3.4 分塊傳輸編碼使用Content-Length字段的前提條件是,服務(wù)器發(fā)送回應(yīng)之前,必須知道回應(yīng)的數(shù)據(jù)長(zhǎng)度。對(duì)于一些很耗時(shí)的動(dòng)態(tài)操作來說,這意味著,服務(wù)器要等到所有操作完成,才能發(fā)送數(shù)據(jù),顯然這樣的效率不高。更好的處理方法是,產(chǎn)生一塊數(shù)據(jù),就發(fā)送一塊,采用流模式(stream)取代緩存模式(buffer)。因此,1.1版規(guī)定可以不使用Content-Length字段,而使用分塊傳輸編碼(chunked transfer encoding)。只要請(qǐng)求或回應(yīng)的頭信息有Trans

12、fer-Encoding字段,就表明回應(yīng)將由數(shù)量未定的數(shù)據(jù)塊組成。Transfer-Encoding: chunked每個(gè)非空的數(shù)據(jù)塊之前,會(huì)有一個(gè)16進(jìn)制的數(shù)值,表示這個(gè)塊的長(zhǎng)度。最后是一個(gè)大小為0的塊,就表示本次回應(yīng)的數(shù)據(jù)發(fā)送完了。下面是一個(gè)例子。HTTP/1.1 200 OKContent-Type: text/plainTransfer-Encoding: chunked25This is the data in the first chunk1Cand this is the second one3con8sequence03.5 其他功能1.1版還新增了許多動(dòng)詞方法:PUT、PATCH、HEAD、 OPTIONS、DELETE。另外,客戶端請(qǐng)求的頭信息新增了Host字段,用來指定服務(wù)器的域名。Host: 有了Host字段,就可以將請(qǐng)求發(fā)往同一臺(tái)服務(wù)器上的不同網(wǎng)站,為虛擬主機(jī)的興起打下了基礎(chǔ)。3.6 缺點(diǎn)雖然1.1版允許復(fù)用TCP連接,但是同一個(gè)TCP連接里面,所有的數(shù)據(jù)通信是按次序進(jìn)行的。服務(wù)器只有處理完一個(gè)回應(yīng),才會(huì)進(jìn)行下一個(gè)回應(yīng)。要是前面的回應(yīng)特別慢,后面就會(huì)有許

溫馨提示

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

評(píng)論

0/150

提交評(píng)論