超文本傳輸協議(HTTP,HyperTextTransferProtocol)是互聯網上應用最爲廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。1960年美國人TedNelson構思了一種通過計算機處理文本信息的方法,並稱之爲超文本(hypertext),這成爲了HTTP超文本傳輸協議標準架構的發展根基。TedNelson組織協調萬維網協會(WorldWideWebConsortium)和互聯網工程工作小組(InternetEngineeringTaskForce)共同合作研究,最終發佈了一系列的RFC,其中著名的RFC2616定義了HTTP1.1。
基礎知識
協議就是互聯網中的設備(交換機,路由器,防火牆)等,進行相互通訊的規則。規則規定了發送的數據格式,以及每格式所代表的意義。
HyperTextTransformationProtocol超文件傳輸協議,主要用於web。
HTTP就互聯網中客戶端瀏覽器與web服務器進行相互通訊規則。
http協議的特點:
1、支持客戶端與服務器模式。
2、簡單快捷,客戶端向服務器端發起請求時,只需要指定請求的方式與所請的文件即可。
3、方便靈活,服務器向客戶端返回數據時,可以使用content-type來設置,即將傳遞數據的格式。
4、無連接,當服務器處理完一個請求後,就會斷開連接。
5、無狀態,服務器無法識別,當前的請求與上一次的請求是否同自同一個客戶端。所以產生了cookie會話技術,來保存客戶端的狀態。
6、web服務器是被動的,客戶端是主動的。
協議功能
HTTP協議(HyperTextTransferProtocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。
HTTP是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機需要通過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不僅可用於Web訪問,也可以用於其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。
http協議的組成
http協議是客戶端瀏覽器與web服務器進行相互通信的規則。http協議彩的是一種請求與響應的模式。首先由客戶端發請起請求,服務器端處理完成請求後進行響應。
所以http協議由請求與響應組成:
HTTP之URL
URL(UniformResourceLoacation統一資源定位)是URI(UniformResourceIdentifier統一資源標識)的子集
URL的形式如:
http://host【:port】/【path】
http表示http協議,指示瀏覽器通過網絡找到相應的主機
port表示端口號,默認是80,可以不寫
path表示所請求的文件的路徑,如果省略,必須以'/'結束,如果不寫瀏覽會自動添加'/'
HTTP之請求
請求頭:
請求方式包含get或post
URI請求的文件(包含路徑與文件名)
/20151219/code/01demo_http.php
協議及版本號http/1.1
協議報頭
協議頭分三種:請求報頭、響應報頭、普通報頭(即不屬於請求報頭也不屬於響應報頭)
協議報頭的格式:不區分大小寫
報頭名+":"+空格+值例如host:localhost
請求報頭:
host:表示所請求的主機localhost
user-agent:會將瀏覽器的相關信息傳遞給服務器
accept:接收的數據的類型,
text/html表示,text文本數據html:超文本application表示二進制數據
accept-language:表示所接收的語言zh-cn表示簡體中文zh表示中文
accept-encoding:表示所接收的壓縮格式
connection:表示保持連接(請求發出之後,在沒有得到響應時,告訴服務器不要關閉此連接)
last-modified-since:瀏覽器會緩存之前訪問過的網站的資源文件,通過此報頭來詢問服務器此文件是否被修改過。
referer:表示本次請求來自哪個url。
content-length:表示請求的數據的長度,只有post請求方式纔有
authorization:表示認證
空行
就表示請求的報頭結束,其後是請求的數據,只有post方式空行纔有數據。
HTTP之響應
狀態行
協議及版本號http/1.1
狀態碼及狀態信息200ok
1xx表示接收正在處理
2xx處理的結果
200處理成功
3xx需重定向或讀取緩存等
304沒有修改,讀取自己的緩存
4xx客戶端的錯誤
404找不到請求的文件
5xx服務器的錯誤
響應報頭
Date時間
Server服務器環境
Content-length返回的數據的長度
Content-type返回的數據的類型
Last-modified最後修改時間
Content-language:響應的數據的語言
Content-enconding:響應的數據的壓縮格式
content-charset:響應的數據的字段編碼
空行
響應報頭結束,其後的是數據
Telnet模擬get請求
http協議是一種客戶端服務器模式,所以只能夠訪問web服務器的軟件都是http協議的客戶端。
telnet的運行是cmd窗口,但是win7以上默認沒有開啓telnet軟件。
開啓:
控制面板==>程序==>啓用或關閉window功能
第1步:連接服務器
telnet主機名端口號
回車
默認telnet沒有開啓回顯功能(顯示用戶輸入的內容)
開啓回顯
ctrl+]
再回車
第2步:構造http協議
構造http請求頭
get/URIhttp/1.1
示例:
構造http報頭
構造http空行,併發送請求頭
回車
示例:
PHP模擬get請求
第1步:連接web服務器
fsockopen(主機名,端口號,錯誤代碼,錯誤信息,超時時間);
此函數會返回一個,資源類型的,指向web服務器的連接。
第2步:構造請求頭
第3步:發送請求頭
第4步:接收數據
完整示例:
PHP模擬POST請求
在使用Post方式提交數據時,在http協議中會以下兩請求報頭
content-type:application/x-www-form-urlencoded
content-length:長度
第1步:
第2步:
第3步:
第4步:
PHP模擬HTTP協議響應
header();用於向http協議的響應頭部寫信息
刷新並跳轉:
header("refresh:秒數;url=網址");
示例:
header("location:url");
圖片顯示:
下載:
//告訴瀏覽器以下的數據不需顯示
header('content-type:application/octet-stream');
//告訴瀏覽器以下的數據作爲附件下載
header('content-disposition:attachment;filename=horse.jpg');
發送數據
echofile_get_contents('文件名');
示例: