栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Servlet中获取HTTP和HTTPS请求的完整URL和查询字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Servlet中获取HTTP和HTTPS请求的完整URL和查询字符串

根据设计,

getRequestURL()
为您提供完整的URL,仅缺少查询字符串。

在中

HttpServletRequest
,您可以使用以下方法获取URI的各个部分:

// Example: http://myhost:8080/people?lastname=Fox&age=30String uri = request.getScheme() + "://" +   // "http" + "://  request.getServerName() +       // "myhost"  ":" +     // ":"  request.getServerPort() +       // "8080"  request.getRequestURI() +       // "/people"  "?" +     // "?"  request.getQueryString();       // "lastname=Fox&age=30"
  • .getScheme()``"https"
    如果有
    https://domain
    要求,它将给您。
  • .getServerName()
    domain
    http(s)://domain
  • .getServerPort()
    会给你港口。

使用以下代码段:

String uri = request.getScheme() + "://" +  request.getServerName() +   ("http".equals(request.getScheme()) && request.getServerPort() == 80 || "https".equals(request.getScheme()) && request.getServerPort() == 443 ? "" : ":" + request.getServerPort() ) +  request.getRequestURI() + (request.getQueryString() != null ? "?" + request.getQueryString() : "");

上面的代码片段将获取完整的URI,如果使用的是默认端口,则将隐藏端口;如果

"?"
未提供后者,则不添加和查询字符串。

代理要求

请注意,如果您的请求通过代理传递,则

X-Forwarded-Proto
由于格式可能会更改,因此您需要查看标头:

request.getHeader("X-Forwarded-Proto")

此外,通用标头是

X-Forwarded-For
,它显示原始请求IP而不是代理IP。

request.getHeader("X-Forwarded-For")

如果您自己负责代理/负载平衡器的配置,则需要确保在转发时设置了这些标头。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425867.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号