http學習筆記(一)

寫在前面:

第一次想寫系列文章,學習了一些web知識後,發現本身還有很大的不足,但又不知道該學習些什麼來完善本身的知識體系,偶然在網上看到了一篇介紹http的文章,以爲對本身有一些幫助,因而想要開始學習http,我擔憂本身不可以堅持下去,因此但願能經過這種方式督促本身學習。html

 

 

http概覽

  HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。linux

——百度百科web

  首先,http一種可靠的數據傳輸協議,由於它必須是可靠的,假設http是不可靠的,傳輸的數據老是丟三落四,這樣不是很糟糕,你想上網看一篇新聞,結果只顯示了第一段和第三段,那不是很崩潰。關於可靠性,在後面的文章再介紹。,即便數據來自很遙遠的地方,依舊能夠完整的傳輸過來,不會丟失。chrome

 

         

http又是無狀態的,也就是每次發出的請求都是獨立的,和上次的請求是沒有關係的。這樣的好處是服務器響應的速度會很快,可是很難保持用戶的狀態,如今通常都是經過cookiesession來保持用戶上網時的狀態的。關於這個問題,之後的筆記中還會再談。apache

Web服務器

   接下來講說web談到http,必需要說到web了,由於http協議最普遍的應用就是web了。Web服務器使用的基本都是http協議,因此web服務器也被稱爲是http服務器,在RedHat中apacheservice中使用名字就是httpd。它們在http傳輸過程當中爲客戶端提供內容,讓咱們能夠看到精彩的內容。瀏覽器

 

 

報文初探

 

咱們天天都會用chrome等瀏覽器向web服務器發送http請求,而後服務器給咱們返回一個http響應信息。以上的這個過程被稱爲事務,也就是一個http請求命令和一個http響應命令組成的一個完整的響應過程。緩存

  這樣的解釋可能仍是不夠直觀,咱們可使用telnet工具(關於telnet linux用戶能夠經過yum或者apt-get安裝,win用戶能夠在控制面板中的添加telnet功能)來看看http到底長得是怎麼樣的吧。服務器

  假設這裏有一個web服務器的IP地址是192.168.170.171 端口是默認的80端口,我嘗試用telnet去訪問它。cookie

1 telnet> open 192.168.170.171 80
2 Trying 192.168.170.171...
3 Connected to 192.168.170.171.
4 Escape character is '^]'.
5 Get /index.html HTTP/1.1
6 Host: 192.168.170.171
7 Accept: *

以上信息中,GET開始到最後就是一次簡單的http請求。網絡

我發送完http消息後,當即獲得了如下響應:

 1 HTTP/1.1 200 OK
 2 Date: Thu, 13 Jun 2013 07:14:43 GMT
 3 Server: Apache/2.2.15 (CentOS)
 4 Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
 5 ETag: "c01c3-3f-4df03c3a2d5c3"
 6 Accept-Ranges: bytes
 7 Content-Length: 63
 8 Connection: close
 9 Content-Type: text/html; charset=UTF-8
10 <html>
11     <body>
12         <h1>
13             hello world!
14         </h1>
15     </body>
16 </html>  

Html標籤前面的就是http響應信息了。

這就是一次簡單的http事務了。

它們長得貌似有點嚇人。這裏面到底有什麼東西呢?

                

 

 如今讓咱們看下請求中有什麼信息

1 GET /index.html HTTP/1.1
2 Host: 192.168.170.171
3 Accept: *

首先是GET /index.html HTTP/1.1

這句話定義了客戶端是經過GET方法 發送一個獲取index.html的頁面,在傳輸中使用的是http1.1協議。

第二句定義了目標主機的地址,固然若是有dns服務器的話,這裏寫域名地址也是能夠的。

第三句話寫了客戶端期待接受的MINE類型,也就是客戶端但願獲得的資源是什麼類型。*在這裏表示接受任何類型。

 

 

接下來咱們看響應信息。

 1 HTTP/1.1 200 OK
 2 Date: Thu, 13 Jun 2013 07:14:43 GMT
 3 Server: Apache/2.2.15 (CentOS)
 4 Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT
 5 ETag: "c01c3-3f-4df03c3a2d5c3"
 6 Accept-Ranges: bytes
 7 Content-Length: 63
 8 Connection: close
 9 Content-Type: text/html; charset=UTF-8
10 <html>
11     <body>
12         <h1>
13             hello world!
14         </h1>
15     </body>
16 </html> 

首句HTTP/1.1 200 OK表示服務器採用http1.1協議傳輸這段響應報文,狀態碼200表示響應成功。OK是給管理員看的,也是表示響應成功。

第二句中Date: Thu, 13 Jun 2013 07:14:43 GMT顯示了響應發生的時間。

第三句給出了服務器的一些信息。

第四句中Last-Modified: Thu, 13 Jun 2013 07:06:06 GMT,給出了頁面上次修改的時間。

第五句中ETag: "c01c3-3f-4df03c3a2d5c3" 這至關於一個版本號,這個和web緩存機制有關。

第六句Accept-Ranges: bytes表示對這個頁面資源而言,服務器能夠接受的範圍類型

第七句Content-Length: 63表示了這個頁面的長度

第八句Connection: close表示鏈接被關閉。

第九句Content-Type: text/html; charset=UTF-8這裏表示頁面的文本格式,和字符編碼。

 

到這裏爲止,我對http事務有一個大概的瞭解,上面的一些信息也許暫時還看不明白,我會在後面的學習中逐步完善。今天就到這裏。休息!

相關文章
相關標籤/搜索