這是一篇實踐教程,能夠讓你更加深刻的理解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協議的實踐真的很不錯,學習到了很多新東西,要是光看理論實在是不行。
大家還可以試試其他的。
文章列表