php getHeader(,php函数get_headers是HEAD请求或GET请求

本文通过测试探究了PHP的get_headers函数在获取远程图片大小时是否发送HEAD请求。测试结果显示get_headers实际上是发送GET请求,导致整个图片内容被请求。为了发起HEAD请求,文章建议使用fsockopen或curl。测试环境为ubuntu12.04 + apache,并提供了测试代码和抓包分析。
摘要由CSDN通过智能技术生成

在做一个获取远程图片大小的功能时,因为只是要获取大小,所以不用下载整张图片,只需要获取头信息就可以了。

在php手册上看到get_headers能直接返回头信息,一行代码就搞定了。

问题:

get_headers到底是不是HEAD请求呢?

如果是GET请求,那不是还要下载图片吗?

于是笔者针对这个问题,进行了测试。

测试过程

测试环境是ubuntu 12.04 桌面版,web服务器是apache,支持HEAD请求。

在本地web根目录建立一个文件test.php,用get_headers来获取一张远程图片的头信息,代码:

复制代码 代码示例:

$imageurl = 'http://127.0.0.1/1.png';

$headers = get_headers($imageurl);

其实图片也是本地的一张图片,但是确实是“远程”的,远程图片也可以理解为url地址的图片。

使用抓包工具tcpdump监听本地80端口:

复制代码 代码示例:

sudo tcpdump -i lo -nnA 'src port 80'

而后访问test.php,抓到的包关键部分截图如下:

1405435018_3814.png

可以看到图片的内容也被请求回来了。

最终确定下来get_headers是GET请求,如果要发起HEAD请求,可以使用fsockopen或者curl。

测试代码下载(包含图片):php函数get_headers的测试代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值