创建一个名为“Duration”的自定义响应标头,用于记录生成响应所用的时间。仅当提供值为“Get-Duration”的请求标头“Client”时才允许返回此标头。
答案1
您可以使用设置环境变量为请求设置环境Client: Get-Duration
变量标头添加处理这些请求所需的时间。
[root@dev ~]# cat /etc/httpd/conf.d/test.conf
SetEnvIf Client ^Get-Duration$ SET_DURATION
Header set X-Duration %D env=SET_DURATION
[root@dev ~]# GET -Sed http://localhost/
GET http://localhost/ --> 200 OK
Connection: close
Date: Mon, 14 Sep 2009 15:08:27 GMT
Server: Apache/2.2.3 (Red Hat)
Content-Length: 525
Content-Type: text/html;charset=ISO-8859-1
Client-Date: Mon, 14 Sep 2009 15:08:27 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
Title: Index of /
[root@dev ~]# GET -SedH 'Client: Get-Duration' http://localhost/
GET http://localhost/ --> 200 OK
Connection: close
Date: Mon, 14 Sep 2009 15:08:39 GMT
Server: Apache/2.2.3 (Red Hat)
Content-Length: 525
Content-Type: text/html;charset=ISO-8859-1
Client-Date: Mon, 14 Sep 2009 15:08:39 GMT
Client-Peer: 127.0.0.1:80
Client-Response-Num: 1
Title: Index of /
X-Duration: D=540
mod_headers 文档%D
:
从收到请求到在网络上发送标头的时间。这是请求持续时间的度量。该值前面带有 D=。
根据以下测试,D 似乎以微秒为单位进行测量:
[root@dev ~]# cat /var/www/cgi-bin/sleep.cgi
#!/bin/sh
sleep 1 && echo "Content-type: text/plain" && echo
[root@dev ~]# GET -SedH 'Client: Get-Duration' http://localhost/cgi-bin/sleep.cgi \
| grep Duration
X-Duration: D=1008576
编辑:这种方法只有在您的响应在 Apache 写出标头之前组装时才有意义。如果您使用HTTP 分块或者使用无缓冲的脚本,您的时间安排可能会产生误导。
答案2
如果你在服务器端有 apache 和 php,你可以使用apache_request_headers()读取标题,如果匹配则使用标头()函数来发送自定义标头,这里有一些来自 php 文档的操作方法供您阅读:
- 获取请求标头:https://www.php.net/manual/en/function.apache-request-headers.php
- 发送自定义标头:us3.php.net/manual/en/function.header.php
但是如果您想要报告的时间是总时间 - 由 apache/php 处理并发回请求 - 这可能不可行/不容易做到 - 因为在 php 处理页面时,apache/php 并不知道需要将数据发送回客户端的时间。
保存核心