You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于HTML::Mason的Perl网站中获取完整请求URI?

在HTML::Mason中获取完整请求URI及协议的方法

一、获取请求协议(http/https)

在HTML::Mason的mod_perl环境里,$r是Apache请求对象,判断协议有两种实用方式:

  • 直接检查SSL状态:调用$r->is_https方法,返回真则为HTTPS,否则为HTTP:
    my $protocol = $r->is_https ? 'https' : 'http';
    
  • 如果网站部署在反向代理(如Nginx)之后,后端服务器拿到的是HTTP请求,此时需要读取代理传递的头信息获取真实协议:
    my $protocol = $r->headers_in->{'X-Forwarded-Proto'} || ($r->is_https ? 'https' : 'http');
    

二、获取完整请求URI

完整URI需要手动拼接协议+主机名+路径及查询参数——因为$r->uri和$r->unparsed_uri只返回路径相关部分,不包含协议和主机:

  1. 按上面的方法获取协议
  2. 获取主机名:用$r->hostname或$r->server->server_hostname获取请求的主机名
  3. 获取路径及查询参数:$r->unparsed_uri会返回原始请求中的路径和查询参数部分(比如/page?foo=bar)
  4. 拼接完整URI:
    my $protocol = $r->is_https ? 'https' : 'http';
    my $hostname = $r->hostname;
    my $path_query = $r->unparsed_uri;
    my $full_uri = "$protocol://$hostname$path_query";
    

补充说明

  • $r->uri:返回经过Apache解析后的路径(不含查询参数),比如请求/page?foo=bar时只返回/page
  • $r->unparsed_uri:返回原始请求行中的URI部分,包含路径和查询参数,但不包含协议和主机名

内容的提问来源于stack exchange,提问作者Dina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:00:02