第一次想寫系列文章,學習了一些web知識後,發現本身還有很大的不足,但又不知道該學習些什麼來完善本身的知識體系,偶然在網上看到了一篇介紹http的文章,以爲對本身有一些幫助,因而想要開始學習http,我擔憂本身不可以堅持下去,因此但願能經過這種方式督促本身學習。html
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。linux
——百度百科web
首先,http是一種可靠的數據傳輸協議,由於它必須是可靠的,假設http是不可靠的,傳輸的數據老是丟三落四,這樣不是很糟糕,你想上網看一篇新聞,結果只顯示了第一段和第三段,那不是很崩潰。關於可靠性,在後面的文章再介紹。,即便數據來自很遙遠的地方,依舊能夠完整的傳輸過來,不會丟失。chrome
http又是無狀態的,也就是每次發出的請求都是獨立的,和上次的請求是沒有關係的。這樣的好處是服務器響應的速度會很快,可是很難保持用戶的狀態,如今通常都是經過cookie和session來保持用戶上網時的狀態的。關於這個問題,之後的筆記中還會再談。apache
接下來講說web。談到http,必需要說到web了,由於http協議最普遍的應用就是web了。Web服務器使用的基本都是http協議,因此web服務器也被稱爲是http服務器,在RedHat中apache在service中使用名字就是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事務有一個大概的瞭解,上面的一些信息也許暫時還看不明白,我會在後面的學習中逐步完善。今天就到這裏。休息!