PHP模拟HTTP响应

所谓的PHP模拟HTTP响应,其实是通过header函数修改HTTP协议的响应头部分,常见的有跳转、刷新、下载等。

跳转

意思就是浏览器请求到当前文件之后,直接跳转到其他的位置。
对应的是HTTP的location响应头信息

1
2
3
4
5
<?php
//设置网页编码
header("Content-type:text/html;Charset=utf-8");
//页面跳转
header("Location:https://blog.treelo.xin");

刷新

刷新的本质还是跳转,不过刷新的意思就是告诉浏览器多长时间之后进行跳转
和location的本质区别是,在刷新等待的时候,后面的代码会继续执行!

1
2
3
4
//设置网页编码
header("Content-type:text/html;Charset=utf-8");
header("refresh:3;url=https://blog.treelo.xin");
die("3秒后跳转到其他的页面");

下载

其实下载可以通过a标签来实现

1
<a href="155455412423.png">今日日签</a>

但是,通过a标签进行下载并不可靠,我们可以通过修改http响应协议,告诉浏览器,不需要尝试去解析,而是直接给用户下载

1
<a href="download.php">今日日签</a>

download.php

1
2
3
4
5
6
7
//设置header请求头,告诉浏览器不要解析文件,
//application/octet-strean 二进制流数据类型
header("Content-Type:application/octet-stream");
//指导浏览器如何保存文件(attachment 是以附件额的方式保存)
header("Content-disposition:attachment;filename=155455412423.png");
//将155455412423.png
echo file_get_contents('155455412423.png');

防盗链

refrerer的概括
如果你不想让别的网站,调用自己网站的资源,你可以使用防盗链功能。
refrerer:可以获取访问当前网页的来源。换句话说:你是从哪个网站跳到自己的网站的。

使用$_SERVER[]获取HTTP请求信息
每一次HTTP请求的所以信息,都会自动存储到超全局数组$_SERVER中

1
<a href="https://blog.treelo.xin/download.php">今日日签</a>
1
2
3
4
5
6
7
8
9
10
//判断网页的链接来源是本网站还是外网
if(isset($_SERVER['HTTP_REFERER'])){
//去除来源网站域名,并与本站域名对比
//如果域名一致就提供使用 否则提示其他
if(strpos($_SERVER['HTTP_REFERER'],"http://blog.treelo.xin")===0){
echo "你能使用当前资源";
}else{
echo "你不可以使用当前资源";
}
}

 评论



本站使用 Material X 作为主题 , 总访问量为 次 。
隐藏