P​H​P​中​h​t​t​p​协​议​详​解

PHP文件来说

 

Php能够有  html   css javascript php脚本 flash它的不同部分是在不同的地方运行的(server和client)

 

  http协议

1. http协议是建立在 tcp/ip协议基础上

2. 我们的web开发数据的传输都是依赖于http协议

3. http协议全称是超文本传输协议

 

 

http协议的  http请求

 

基本结构:

请求行

消息头

 

消息体(实体内容)

 

 

 

 


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

}

 

posted @ 2017-05-30 15:54  zhchoutai  阅读(191)  评论(0编辑  收藏  举报