PHP中http協議詳解

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協議自己並無限制數據大小

瀏覽器在對getpost請求作顯示。 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響應在實際應用

 

302狀態碼的使用

 

比方咱們現在但願,當訪問a.php頁面。讓其本身主動重定向到b頁面

 

基本使用方法:

 

<?

php

//這句話會向client發送一個302的狀態碼,告訴瀏覽器又一次訪問b.php

//header可以向http頭寫入信息header — Send a raw HTTP header

header("Location:b.php");

?>

 

細節:302狀態碼也可以讓其跳轉到外網我去

 

404狀態碼的使用

 

通常就是該頁面不存在

 

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);

}

相關文章
相關標籤/搜索