首页 > 代码库 > P?H?P?中?h?t?t?p?协?议?详?解

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

PHP文件来说

 

Php可以有  html   css javascript php脚本 flash它的不同部分是在不同的地方执行的(服务器和客户端)

 

  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 表示客户端可以接收任何数据

Accept-Language 页面语言

Accept-Encoding 表示接收什么样的数据压缩格式

Host  主机

User-Agent 告诉我们服务器内核,操作系统

Connection 表示链接方式 不要立即断掉我们的请求

Referrer  表示我是从哪里来 防盗链

 

 

如果我这个http2.php , 不希望192.168.0.3的访问

 

在服务器端,我们可以通过一个$_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表示客户端请求成功

Server:Microsoft-IIs/5.0           表示告诉浏览器 服务器情况

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

//这句话会向客户端发送一个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");

//这里客户端的弹出圣诞框,对应的文件名

header("Content-Disposition:attachment;filename=".$file_name);

 

//向客户端回送数据

$buffer=1024;

//为了下载的安全,我们最好做一个文件字节读取计数器

$file_count=0;

//这句话用于判断文件是否结束

while(!feof($fp)&& ($file_size-$file_count>0)){

$file_data=http://www.mamicode.com/fread($fp,$buffer);

//统计读了多少个字节

$file_count+=$buffer;

//把部分数据回送给浏览器

echo $file_data;

}

// 关闭文件

fclose($fp);

}