http协议以及防盗链技术
http協(xié)議,又稱為超文本傳輸協(xié)議,顧名思義,http協(xié)議不僅能傳輸文本,還能傳輸圖片,視頻,壓縮包等文件,http協(xié)議是建立在tcp/ip協(xié)議的基礎(chǔ)之上的,http協(xié)議對(duì)php程序員來講可以說是重中之重了;
http請(qǐng)求基本結(jié)構(gòu)分為:請(qǐng)求行;消息頭;實(shí)體內(nèi)容;
請(qǐng)求行:
GET/xxx/xxx.html? HTTP/1.1? ? ? ? ? //HTTP/1.1是http協(xié)議版本,1.1支持長(zhǎng)連接,1.0支持短連接,目前普遍使用1.1版本;
消息頭(請(qǐng)求報(bào)頭):
Accept:*/*? ? ? ? ?//表示客戶端可接受什么類型的資源,*表示通配符,表示可以接受任何類型的資源;
Referer : http://localhost:80/XX.html? ? ? ? //表示用戶是從哪里鏈接過來的(之后防盜鏈技術(shù)會(huì)詳解);
Accept-Launguage: zh-cn? ? ? ? ? ? ? ? ?//表示頁面可以支持哪種語言;
User-Agent: Mozila/4.0? ? ? ? ? ? ? ? ? ? //表示瀏覽器的內(nèi)核以及操作系統(tǒng);
Accept-Encoding:gzip,deflate? ? //表示客戶端支持什么類型的數(shù)據(jù)壓縮格式;
Host:localhost:80? ? ? ? ? ? ? ? ? ? ? ?//表示主機(jī)號(hào)和端口,這個(gè)是給tcp/ip協(xié)議識(shí)別的;
Connection:Keep-Alive? ? ? ? ? ? ? ? //表示長(zhǎng)連接,不會(huì)立刻中斷請(qǐng)求;
實(shí)體內(nèi)容? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//表示客戶端向服務(wù)器傳遞了哪些資源;
?
http響應(yīng)內(nèi)容:
HTTP/ 1.1? 200? OK //200表示服務(wù)器請(qǐng)求成功;其余常見的狀態(tài)碼在后面說;
Server: //表示服務(wù)器信息;
Date: //瀏覽器請(qǐng)求該頁面的時(shí)間;
Content-Length:? ? ? ? ? ? ? ? ? ? ? ? ? //表示服務(wù)器回送了多少字節(jié)的資源;
Content-Type:? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//文檔類型及使用什么編碼;
Last-Modified: //所請(qǐng)求的資源最新更新時(shí)間;
Refresh:1;url=http:xxx.com //間隔多少秒之后重定向;可在header()函數(shù)中寫入實(shí)現(xiàn)X秒后重定向頁面;
Content-Disposition: //這個(gè)關(guān)于文件下載;
Transfer-Encoding: //文件下載
Set-Cookie:
Keep-Alive:timeout=5,max=99? ? //表示長(zhǎng)連接可維持多少秒;
Expires: -1 ;? //控制頁面是否支持緩存;瀏覽器默認(rèn)支持緩存,在header函數(shù)中輸入以下三個(gè)頭信息;
Cache-Control: no-cache ;? //緩存存在的時(shí)間是可以自行指定的;
Pragma:? no-cache ; //控制頁面是否支持緩存;
http響應(yīng)的狀態(tài)碼詳解可以點(diǎn)擊下面鏈接查閱:https://baike.baidu.com/item/HTTP狀態(tài)碼/5053660?fr=aladdin
常用的有302,304,202,404狀態(tài)碼:302狀態(tài)碼一般用于做重定向;404狀態(tài)碼通常是所查找的資源不存在;304碼一般在當(dāng)http發(fā)送請(qǐng)求資源時(shí)發(fā)現(xiàn)緩存中有相同資源,瀏覽器則會(huì)向服務(wù)器端發(fā)送一個(gè)(Last-Modified:)該資源最近更新的時(shí)間參數(shù),由服務(wù)器去驗(yàn)證該資源的最近更新時(shí)間是否一致,如一致說明該資源沒有進(jìn)行更新則向緩存取出該資源;
在PHP中你可以通過 echo? $_SERVER? ?來獲取所有關(guān)于該頁面HTTP協(xié)議的所有內(nèi)容;
常用的有:
HTTP_HOST //主機(jī)名;
DOCUMENT_ROOT //獲取apche的主目錄;
REQUEST_URI //獲取請(qǐng)求的資源名;
REMOVE_ADDR //獲取當(dāng)前訪問客戶端的IP地址;
HTTP_REFERER? ? ? ? ? ? //告訴服務(wù)器我是從哪個(gè)頁面鏈接過來的;
用法:? $_SERVER[ ' REMOVE_ADDR ' ] ;
可以使用header()語句向http響應(yīng)頭寫入信息;
http的請(qǐng)求方式有兩種,GET請(qǐng)求和POST請(qǐng)求;從安全性而言,GET請(qǐng)求會(huì)顯示在地址欄上,相比POST而言更不安全;GET請(qǐng)求處理速度更快,但是只可以處理2K以內(nèi)的數(shù)據(jù),多數(shù)用于查數(shù)據(jù),而POST雖相對(duì)較慢但不限制資源大小,多數(shù)用于增、刪、改;
$_GET :可傳輸多個(gè)參數(shù),eg:http://xxx/xxx.php?字段名=參數(shù)&字段名=參數(shù);使用empty($_GET('字段名'))驗(yàn)證是否接收到參數(shù);
$_POST :用于傳遞數(shù)據(jù),多數(shù)用于增刪改;在php.ini文件中關(guān)閉register_globals設(shè)置,防止SQL注入;
簡(jiǎn)單的防盜鏈技術(shù):
if( isset ( $_SERVER[ ' HTTP_REFERER' ] ) ){ //這條語句判斷HTTP協(xié)議里是否有REFERER值;
if( strpos ( $SERVER[ ' HTTP_REFERER' ] ,“ http://頁面主址 ” ) == 0?){ //這條語句判斷REFERER值是否從本網(wǎng)站鏈接進(jìn)來;
echo? ?顯示信息? ;
}else{
header( " Location:? 警告頁面 " ); //如進(jìn)入else語句則說明該用戶是盜鏈過來的,跳轉(zhuǎn)到警告頁面;
}
}else{
header( " Location:? 警告頁面 " );
}
更多專業(yè)前端知識(shí),請(qǐng)上 【猿2048】www.mk2048.com
總結(jié)
以上是生活随笔為你收集整理的http协议以及防盗链技术的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写一个作用域安全的构造函数
- 下一篇: js css模仿打字效果