如何创建自定义响应标头?

如何创建自定义响应标头?

创建一个名为“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 文档的操作方法供您阅读:

但是如果您想要报告的时间是总时间 - 由 apache/php 处理并发回请求 - 这可能不可行/不容易做到 - 因为在 php 处理页面时,apache/php 并不知道需要将数据发送回客户端的时间。

保存核心

相关内容