HTTP請求
請求行
1)形式:請求方式? 資源路徑? 協(xié)議版本號
2)eg. GET /index.php HTTP/1.1
請求行獨占一行(第一行)
請求頭
請求頭就是各項協(xié)議內(nèi)容:具體的協(xié)議內(nèi)容不會每次都使用全部
1)Host::請求的主機地址(必須)
2)Accept:當(dāng)前請求能夠接收服務(wù)器返回的類型(MIME類型)
3)Accept-Language:接收的語言
4)User-Agent:客戶瀏覽器所在點的一些信息
請求頭不固定數(shù)量,每一個請求協(xié)議也是獨占一行,最后有一個空行(用來區(qū)分請求頭喝請求體)
請求體
請求數(shù)據(jù):POST請求會有請求體。GET請求所有的數(shù)據(jù)都跟在URL之后,會在請求行的在資源路徑上體現(xiàn)
基本格式:資源名字=資源值&資源名字=資源值……

HTTP響應(yīng)
響應(yīng)行
1)形式: 協(xié)議版本號 狀態(tài)碼 狀態(tài)消息(獨占一行)
HTTP/1.2 200 ok
2)200 ok:成功
3)403 forbidden :沒權(quán)限訪問
4)404 not found :沒找到頁面
5)500 server internal error:服務(wù)器內(nèi)部錯誤
響應(yīng)頭
具體協(xié)議內(nèi)容
1)時間:wed, 16 sep 2018 11:22:33 GMT
2)服務(wù)器:server:Apache/2/2/22(win32) PHP/5.3.13
3)內(nèi)容長度:content-length:1571 是數(shù)據(jù)具體的字節(jié)數(shù)
3)內(nèi)容類型:content-type:text/html 告訴瀏覽器對應(yīng)的數(shù)據(jù)格式
響應(yīng)頭一個占一行,最后一行空行
響應(yīng)體
實際服務(wù)器響應(yīng)給瀏覽器的內(nèi)容

常見HTTP狀態(tài)碼
1xx:服務(wù)器正在處理
200:成功
3xx:請求的目標(biāo)已經(jīng)轉(zhuǎn)移或已更新
4xx:客戶端出錯
403:拒接訪問
404:找不到
5xx:服務(wù)器錯誤
常見HTTP響應(yīng)設(shè)置及使用
通過函數(shù)header 來實現(xiàn)修改HTTP響應(yīng)(響應(yīng)頭)
注意事項:header可以設(shè)計HTTP響應(yīng),header設(shè)置響應(yīng)體之前不要有任何輸出
1)location:重定向,立即跳轉(zhuǎn)(響應(yīng)體不用解析)
瀏覽器在解析服務(wù)器的時候:盼盼定響應(yīng)行,繼續(xù)響應(yīng)頭,最后響應(yīng)體:location是在響應(yīng)頭中,所以瀏覽器一旦劍道該協(xié)議項,不在向下解析。

2)refresh:重定向,定時跳轉(zhuǎn)(響應(yīng)體會解析)



延時重定向:瀏覽器會根據(jù)具體時間延遲后,再訪問指定跳轉(zhuǎn)鏈接:瀏覽器在準(zhǔn)備跳轉(zhuǎn)訪問之前,會繼續(xù)解析HTTP協(xié)議(響應(yīng)頭和響應(yīng)體)
3)content-type:內(nèi)容類型,mime類型
通過內(nèi)容告知,瀏覽器正確解析內(nèi)容

4)content-disposition:內(nèi)容類型,mime類型擴展,激活瀏覽器文件下載對話框
瀏覽器在解析內(nèi)容時,默認是直接解析:有時候需要瀏覽器不解析,當(dāng)做內(nèi)容下載成文件

PHP模擬http請求
原理:

前提條件:http協(xié)議的客戶端/服務(wù)端模式,HTTP協(xié)議不局限于一定要瀏覽器訪問
curl擴展庫使用
1)開啟curl擴展
四步
1)建立連接:curl_init():激活一個curl連接功能

2)設(shè)置請求選項:curl_setOpt():設(shè)定選項
CUROPT_URL:連接對象
CURLOPT_RETURNTRANSFER:將服務(wù)器執(zhí)行的結(jié)果(響應(yīng))以文件流的形式返回給請求界面(PHP腳本)
CURLOPT_POST:是否采用POST方式發(fā)起請求(默認請求時GET)
CURLOPT_POSTFIELDS:用來傳遞post提交的數(shù)據(jù),分兩種:字符串(name=abc&password=123)以及數(shù)組形式(array('name'=>'abc'),......)
CURLOPT_HEADER:是否得到相應(yīng)的header信息(響應(yīng)頭),默認不獲取

3)執(zhí)行請求:curl_exec():執(zhí)行選項(與服務(wù)器發(fā)起請求,得到服務(wù)器返回的內(nèi)容)

4)關(guān)閉連接:curl_close():關(guān)閉資源
