当前位置: 首页 > 面试题库 >

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

琴献
2023-03-14
问题内容

我正在编写代码,该代码的任务是检索请求的URL或完整路径。我写了这段代码:

HttpServletRequest request;//obtained from other functions
String uri = request.getRequestURI();
if (request.getQueryString() != null)
    uri += "?" + request.getQueryString();

因此,当我浏览时http://google.com?q=abc,确定(正确)。但是浏览时出现问题https://google.com。的价值uri就是http://google.com:443google.com:443,所以程序不只做时HTTPS使用。

和的输出相同request.getRequestURL().toString()

解决办法是什么?


问题答案:

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

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

// Example: http://myhost:8080/people?lastname=Fox&age=30

String uri = request.getScheme() + "://" +   // "http" + "://
             request.getServerName() +       // "myhost"
             ":" +                           // ":"
             request.getServerPort() +       // "8080"
             request.getRequestURI() +       // "/people"
             "?" +                           // "?"
             request.getQueryString();       // "lastname=Fox&age=30"
  • .getScheme()``"https"如果有https://domain要求,它将给您。
  • .getServerName()domainhttp(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")

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



 类似资料:
  • 问题内容: 有没有办法获取包含页面中用于请求当前页面的整个URL,包括锚点(#后面的文本-我可能使用了错误的单词)? 即页面foo.php包含在bar.php中。如果我在foo.php中使用您的解决方案,则需要说出bar.php?blarg = a#blahblahblah 问题答案: 不,恐怕不会,因为哈希( 包括 #的字符串)永远不会传递到服务器,因此它仅仅是浏览器的行为属性。该变量将包含其余

  • 问题内容: 我正在使用Go中的程序包来处理POST请求。如何访问和解析对象中查询字符串的内容?我从官方文档中找不到答案。 问题答案: 根据定义,QueryString 位于URL中。您可以使用(doc)访问请求的URL 。URL对象具有一个返回类型的方法(doc),该类型只是QueryString参数的一个。 如果您要查找的是HTML表单提交的POST数据,那么(通常)这是请求正文中的键/值对。您

  • 我的angularjs$http请求有问题。当我向API发送请求时,浏览器阻止了它,如:FIREFOX中的错误:阻止加载混合活动内容“http://www.example.com/rest/default/V1/integration/admin/token/” CHROME出错:混合内容:页面位于'https://www.example.com/load.shtml#/register/pos/

  • 问题内容: 我最近尝试使用jQuery从URL获得一些响应。因此,我将jQuery API Get Request Tutorial 的get request示例复制到我的项目中并尝试运行它,但是我的调试消息告诉我,它无法继续进行。我使用一个简单的请求尝试了javascript Ajax库,但没有成功。 所以我问你,你能否以某种方式帮助我。 这就是我所做的一切,但是没有任何回应。 我可能忘了包括a

  • 我从jquery发送如下请求: 在servlet内部,我可以获得参数,但问题是参数包含序列化的表单数据:如下所示: 我知道我可以使用来获取数据,但我想确保--如果他们的方法简单与否?

  • 问题内容: 我需要的是将URL 的值转换成变量,然后在jQuery代码中使用它: 有谁知道如何使用JavaScript或jQuery来获取该价值? 问题答案: 这就是你所需要的:) 以下代码将返回一个包含URL参数的JavaScript对象: 例如,如果您具有URL: 此代码将返回: 您可以执行以下操作: