對PHP文件來講javascript
Php可以有 html css javascript php腳本 flash它的不一樣部分是在不一樣的地方運行的(server和client)php
http協議css
1. http協議是創建在 tcp/ip協議基礎上html
2. 咱們的web開發數據的傳輸都是依賴於http協議java
3. http協議全稱是超文本傳輸協議web
http協議的 http請求ajax
基本結構:apache
請求行瀏覽器
消息頭緩存
消息體(實體內容)
Accept text/html,application/xhtml+xml,application/xml;
q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Cache-Control max-age=0
Connection keep-alive
Host localhost
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
GET /http2.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost/test.php
Connection: keep-alive
說明:
GET override.php表示用get方式請求資源
Accept 表示client可以接收不論什麼數據
Accept-Language 頁面語言
Accept-Encoding 表示接收什麼樣的數據壓縮格式
Host 主機
User-Agent 告訴咱們server內核,操做系統
Connection 表示連接方式 不要立刻斷掉咱們的請求
Referrer 表示我是從哪裏來 防盜鏈
假設我這個http2.php , 不但願192.168.0.3的訪問
在server端。咱們可以經過一個$_SERVER 來獲取咱們需要的信息
重要的有:
HTTP_HOST=localhost
REMOTE_ADDR=127.0.0.1 訪問該頁面的IP
DOCUMENT_ROOT=G:/zhentuan 可以獲取apache的主文件夾
REQUEST_URI=/http2.php 可以獲取請求的資源名
http請求有兩種基本的方式:
get/post 差異與聯繫
1. 安全性 get請求的數據會顯示在地址欄上,post請求的數據放在http協議消息體內
2. 從可以提交的數據的大小來看:
http協議自己並無限制數據大小
瀏覽器在對get和post請求作顯示。 get請求數據2k+35 post請求沒有限制
3. Get請求可以更好的加入到收藏夾
現在咱們實際使用一些http請求,完畢一個防盜鏈的練習
☞
if(isset($_SERVER['HTTP_REFERER'])){
//取出來
//推斷$_SERVER['HTTP_REFERER'] 是否是以http://localhost開頭的
if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/...")==0){
echo "你可以查看信息";
}else
{
//跳轉到警告頁面
header("Loaction:warning.php");
}
}else
{
//跳轉到警告頁面
header("Location:warning.php");
}
http協議的 http響應
Location:http://www.baidu.org/index.php
HTTP/1.1 200 OK 200 OK表示client請求成功
Server:Microsoft-IIs/5.0 表示告訴瀏覽器 server狀況
Date:Thu,13 Jul 2000 05:46:53 GMT 告訴瀏覽器 請求頁面的時間
Content-Length 2291 表示回來的數據有2291字節
Content-Type:text/html 文檔類型
Cache-control:private 緩存
對狀態碼的說明
舉例說明http響應在實際應用
u 302狀態碼的使用
比方咱們現在但願,當訪問a.php頁面。讓其本身主動重定向到b頁面
基本使用方法:
<?
php
//這句話會向client發送一個302的狀態碼,告訴瀏覽器又一次訪問b.php
//header可以向http頭寫入信息header — Send a raw HTTP header
header("Location:b.php");
?>
細節:302狀態碼也可以讓其跳轉到外網我去
u 404狀態碼的使用
通常就是該頁面不存在
u 304狀態碼的使用
演示怎樣經過http響應,控制瀏覽器間隔必定時間去跳轉
<?php
Header(「Refresh:3;url=http://www.sohu.com」);
?
>
演示怎樣經過http響應控制頁面緩存。默認狀況下瀏覽器會緩存頁面
//經過header來禁用緩存(ajax)
header("Expires:-1");
header("Cache-control:no-cache");
header("Pragma:no-cache");
echo "hellow cache";
http文件下載
文件下載的原理
//對函數的說明
//1.參數說明$file_name文件名稱
//2. $file_sub_dir:下載文件的子路徑 './xxx/xxx/'
function down_file($file_name,$file_sub_dir){
//死去活來,演示下載一個圖片
//假設文件是中文,必須對文件名稱進行轉碼
//緣由,php文件函數,比較古老,需要對中文轉碼GB2312
$file_name=iconv("utf-8","gb2312",$file_name);
//1.使用相對路徑
$file_path=$file_sub_dir.$file_name;
//2.使用絕對路徑
//$file_path=$_SERVER['DOCUMENT_ROOT']."/down/".$file_name;
//打開文件
if(!file_exists($file_path))
{
echo "文件不存在";
return;
}
$fp=fopen($file_path,"r");
//獵取下載文件大小
$file_size=filesize($file_path);
//返回的文件
header("Content-type:application/octet-stream");
//依照字節大小返回
header("Accept-Ranges:bytes");
//返回文件大小
header("Accept-Length:$file_size");
//這裏client的彈出聖誕框,相應的文件名稱
header("Content-Disposition:attachment;filename=".$file_name);
//向client回送數據
$buffer=1024;
//爲了下載的安全,咱們最好作一個文件字節讀取計數器
$file_count=0;
//這句話用於推斷文件是否結束
while(!feof($fp)&& ($file_size-$file_count>0)){
$file_data=fread($fp,$buffer);
//統計讀了多少個字節
$file_count+=$buffer;
//把部分數據回送給瀏覽器
echo $file_data;
}
// 關閉文件
fclose($fp);
}