2

我有一个模块需要在其有效负载中返回参考 URI。如果通过 SSL 连接调用,我需要构建一个具有 https 前缀的 URI。我可以轻松地从请求中获取端口号,但问题是用户可以选择任何 SSL 端口(事实上,这个特定的 Apache 实例总是以非标准 SSL 端口开始)。

请求结构中所有已解析的 URI 都已删除 http/https 前缀。我正在考虑使用 r->server->defn_name 字段,该字段实际上包含请求的虚拟服务器的 conf 文件。如果我看到它以 httpd-ssl.conf 结尾,我可以猜测这是一个 SSL 连接。仍然感觉像是 hack,实际上用户也可以将该 conf 文件命名为其他名称,这会破坏这种方法。

另一种方法是读取配置文件并找到 SSL VirtualHost Listen 端口,但我也无法完成此操作。

似乎我缺少一些非常简单的方法来判断请求是否是通过 https 发出的,但是我已经扫描了 request_rec 中可用的所有结构,但没有看到任何明显的东西。

4

1 回答 1

3

httpd.h 头文件中定义了一个很好的函数,它将为您提供请求的方案:

if (apr_strnatcmp(ap_http_scheme(r), "https") == 0) {
    ssl = TRUE;    
} else {
    ssl = FALSE;
}
于 2010-11-14T06:18:22.567 回答