文章出處

這是一篇實踐教程,能夠讓你更加深刻的理解HTTP協議,因此需要一定的HTTP基礎。

 

協議:一種規定,規定了你應該怎么去做,如w3c規定了瀏覽器應該怎么去解析HTML,CSS,JS。而HTTP則規定了客戶端怎么和服務器端進行數據傳輸,簡單來說就是我們得按照它的格式去寫。

 

前幾天花了點時間學習HTTP協議,但覺得光知道不行啊,還得實踐一般,現在我的學習方法就是:要么學,要么不學,學就得學通來,當然不是真的通,而是至少得明白它是干嘛的,怎么用,怎么更好的用....除非這東西花了很久時間都沒看懂,就先放著,因為以前學東西的時候總是東點西學點,還沒有搞明白呢就跑去學其他的了,最后發現還是得回去重新學,這樣反而浪費了大把時間,最后啥也沒有學到,對于HTTP之前是沒有把它當回事的,但隨著時間的流逝發現學它實在是太有必要了,因此為了更好的理解HTTP協議,這里用PHP來實踐一下。畢竟要玩轉HTTP還是得用點后端的東西的,雖然對后端了解不是很多,但用來學這個足以。

 

需要用來的工具:

1.php環境   我們需要用來與客戶端進行數據交換。

2.telnet   telnet:可以用來與遠程服務器進行連接。

 

win7默認沒有開啟telnet,如果開啟可以看這篇文章:Win7如何解決telnet不是內部或外部命令的方案

 

cmd輸入 telnet ip 80   回車       本機ip可以通過ipconfig來查看

telnet 192.168.1.100 80

我們還需要進入到回顯模式。按 Ctrl + ]  

再按一次回車 OK。

 

我們接下來可以書寫HTTP格式。

 

先測試一下GET。

輸入:GET /文件路徑 HTTP/1.1 回車          這個回車表示請求行結束

Host: ip地址  回車  這個回車表示結束這個請求頭

回車 這個回車表示結束輸入,發送請求。

 

GET /index.php HTTP/1.1

Host: 127.0.0.1

 

index.php

<?php

  echo 'Hello HTTP';

?>

 

返回的數據

 

 

請求行

  GET:請求方式

  ./index.php: 請求路徑

  HTTP/1.1: HTTP版本

 

請求頭

  Host: 127.0.0.1   :ip地址

 

GET沒有請求體

 

從這個例子中我們可以看出,HTTP不一定得有瀏覽器,但發送HTTP一定得按照它的格式。

 

可以看到它們的大體執行過程:

  建立連接 - 響應連接 - 關閉連接

 

原來瀏覽器幫我們做了很多事情,比如Host,瀏覽器通過我們的URL解析出來的,HTTP版本根據瀏覽器自身提供,路徑也是通過URL解析出來的。

 

POST測試:

POST /index.php HTTP/1.1
Host: 127.0.0.1
Content-type: application/x-www-form-urlencoded
Content-length: 10

 

name=rrraa

  這里必須寫上Content-length和Content-type不然發送不成功。

  Content-length: 客戶端會根據這個進行接收數據的長度,超出的不管。

  Content-type: 告訴客戶端發送的這個數據類型是什么。

 

index.php

<?php

  $str = implode($_POST,"\n"); 接收數據

  print_r($str); 響應數據

?>

 

 

通過HEAD方法在不獲取內容的情況下,檢查服務器某個文件是否存在,以前面試的時候還問了這個問題,當時沒答上。

HEAD /index.php HTTP/1.1

Host: 127.0.0.1

Accept: *

  必須加上Accept不然還是會獲取內容,就和GET方法一樣了。

這樣我們就可以在不通過獲取文件內容的情況下,通過狀態碼進行判斷文件是否存在了以及是否修改。

 

我們訪問一個假路徑看看什么情況。

404了,正是我們想要的效果。

 

通過這些對HTTP協議的實踐真的很不錯,學習到了很多新東西,要是光看理論實在是不行。

 

大家還可以試試其他的。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()