如何在 Hapi 中获取请求的完整 URL

2023-12-27

在我的 hapijs 应用程序中,给定Request object http://hapijs.com/api#request-object,如何找到原始的、未解析的、未修改的 URL?

function getRequestUrl (request) {
    return ...; // What goes here?
}

我发现我可以把它拼凑起来Request.info.host, Request.path, and Request.query,但它缺乏方案(即,http 与 https),并且有点混乱。普通 URL 不是在某处可用吗?


完整的 URL 不会存储在您可以获取的地方。您需要根据以下部分自行构建它:

const url = request.connection.info.protocol + '://' + request.info.host + request.url.path;

尽管这看起来很糟糕,但如果你仔细想想,这是有道理的,因为没有原始的、未解析的、未修改的 URL。通过网络传输的 HTTP 请求不包含在浏览器地址栏中输入的 URL,例如:

GET /hello?a=1&b=2 HTTP/1.1      // request.url.path
Host: localhost:4000             // request.info.host
Connection: keep-alive
Accept-Encoding: gzip, deflate, sdch
...

并且您只能根据 hapi 服务器连接是否处于 TLS 模式来了解协议(request.connection.info.protocol).

需要注意的事项

如果您检查:

request.connection.info.uri or request.server.info.uri

报告的主机名将是服务器正在运行的实际计算机的主机名(输出hostname在 *nix 上)。如果您想要在浏览器中输入的人的实际主机(可能不同),您需要检查request.info.host从 HTTP 请求的 Host 标头解析)

代理和 X-Forwarded-Proto 标头

如果您的请求通过代理/负载均衡器/HTTPS 终止符传递,则 HTTPS 流量可能会被终止并通过 HTTP 连接发送到您的服务器,在这种情况下,您需要使用以下值这x-forwarded-proto标头(如果存在):

const url = (request.headers['x-forwarded-proto'] || request.connection.info.protocol) + '://' + request.info.host + request.url.path;

使用模板字符串:

const url = `${request.headers['x-forwarded-proto'] || request.connection.info.protocol}://${request.info.host}${request.url.path}`;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Hapi 中获取请求的完整 URL 的相关文章

  • Twig 链接到当前路线但更改区域设置

    我会在现有网站中添加一些指向不同区域设置版本的链接 效果很好 但是很丑 li a href img src alt es a li li a href a li
  • Nodejs Hapi - 如何启用跨源访问控制

    我正在使用 HapiJs Restful Web 服务并尝试启用 cors 以便任何来自不同域的客户端都可以使用我的服务 我在服务器连接对象中尝试了 cors true 但没有成功 你放在哪里cors true 你能添加一些代码吗 不知道你
  • 使用破折号显示 URL slug 时出现问题

    我为我的故事 URL 创建了一个带有破折号的 slug 例如 使用 slug 而不是 ID 来获取记录 https stackoverflow com questions 482636 fetching records with slug
  • 如何从 Pylons 中的 URL 获取多个同名参数?

    因此 不幸的是 我发现自己处于需要修改现有 Pylons 应用程序以处理提供多个同名参数的 URL 的情况 像下面这样的东西 域 端口 操作 c 1 v 3 c 4 通常 参数是这样访问的 from pylons import reques
  • AWS 签名的 URL 太长,无法缩短

    我正在使用 AWS 创建一个签名 URL 以便我可以安全地将此 URL 传递给另一个 API 以供临时使用 签名的 URL 指向 S3 资源 问题是其他 API 不接受这么长的链接 因此我正在尝试缩短它 我尝试使用类似的缩短器goo gl
  • 当url中有空格时htaccess重定向

    我想从仍然出现在谷歌搜索中的旧网址重定向到新网址 旧的网址是这样的 http www marionettecolla org file 20 mostra milano mostra marionette milano htm 我想将其重定
  • 如何使用 Perl 从纯文本中提取 URL?

    我需要 Perl 正则表达式来解析纯文本输入并将所有链接转换为有效的 HTML HREF 链接 我已经尝试了在网上找到的 10 个不同版本 但没有一个可以正常工作 我还测试了 StackOverflow 上发布的其他解决方案 但似乎都不起作
  • hapijs有过载保护之类的东西吗?

    如果 hapi 服务器过载 它会做什么 是否有类似的情况太忙js https www npmjs com package toobusy js通过快捷方式处理一些有错误的请求来防止服务器崩溃 是的 它嵌入在框架中 看看load关于连接set
  • 我应该如何使用 Perl URI 类?

    我需要在 Perl 程序中处理一些 HTTP URL 但我怀疑应该如何处理URI https metacpan org module URI类帮助我 特别是 我想使用URI用于解析相对 URL 并获取其组件的类 然而 问题是 我需要一个可以
  • 在JSP中获取Servlet转发的请求URL

    如何在JSP中获取Servlet转发的请求URL 如果我在 JSP 中运行以下代码 System out println servlet path request getServletPath System out println requ
  • 如何在 Emacs Lisp 中“URL 解码”字符串?

    我有一个像 foo 20bar 这样的字符串 我想要其中的 foo bar 我知道 Emacs Lisp 中必须有一个内置函数来解码 URL 编码的字符串 查询字符串 但我今天找不到它 无论是在我的文档中还是在我的文档中都找不到它 lisp
  • 在弹性搜索中使用 GET/POST 时的不同结果

    我正在通过 Elastic Search Head 插件尝试弹性搜索 当我通过 POST 提交查询时 结果符合预期 但是 当我使用 GET 尝试相同的查询时 我总是会返回索引中的所有值 那么 如何通过 GET 将查询传递到弹性搜索服务器 以
  • Zend url:获取参数始终保留在 url 中

    我在使用带有 get 参数的 Zend url 帮助器时遇到一些问题 在一个视图中 我有分页 它在 get 中发送额外的参数 所以在 url 中 所以没关系 但这是不行的 即使我更改页面 参数也始终保留在 url 中 事实上 zend ur
  • PHP 中的 Javascript“unes​​cape”

    我的图像主机有一个 Google Chrome 扩展程序 它会向我的网站发送一个 URL 该网址得到encoded通过 JavaScript 的escape method 编码的 URLescape看起来像这样 http 253A 4 bp
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • WPF 无法从 url 检索 WebP 图像?

    我无法从网址检索图像 以前 在设置 HttpClient 标头之前 我根本无法连接到该站点 我可以从其他来源检索图像 但不能从这个特定来源检索图像 检索图像的代码 var img new BitmapImage img BeginInit
  • C# 正则表达式模式从给定字符串中提取 url - 不是完整的 html url,而是裸链接

    我需要一个正则表达式来执行以下操作 Extract all strings which starts with http Extract all strings which starts with www 所以我需要提取这2个 例如 下面有
  • 将文本中的所有 URL 替换为 PHP 中的可点击链接[重复]

    这个问题在这里已经有答案了 我有一个用 PHP 编写的 Web 应用程序 我想找到用户评论中的所有 URL 并将它们更改为可点击的链接 我搜索了很多网站和页面 找到了以下解决方案 不幸的是我没有再次找到它的参考链接 感谢其作者 该代码可以完
  • 正则表达式:如何表达没有下划线的 \w

    有没有简洁的表达方式 w but without 即 w 中包含的所有字符 除了 我问这个是因为我正在寻找最简洁的方式来表达域名验证 域名可以包含小写和大写字母 数字 句号和破折号 但不能包含下划线 w 包括以上所有内容 加上下划线 那么
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko

随机推荐

  • 如何将值添加到地图内的集合? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有这张地图Map
  • 为什么我不能打开一个类,对枚举进行一次隐式转换

    我想知道为什么到枚举值的单个隐式转换的工作方式与转换到系统类型时的工作方式不同 我看不出任何技术原因 但也许比我聪明的人可以为我提供一些启示 以下无法编译 A value of an integral type expected and C
  • Clojure 中可以创建循环引用吗?

    忽略本机互操作和瞬态 是否可以在 Clojure 中创建任何包含直接循环引用的数据结构 看起来不可变的数据结构只能包含对自身先前版本的引用 是否有任何 Clojure API 可以创建一个引用自身的新数据结构 Scheme 具有 letre
  • 关于SQL查询的问题

    我正在做一个涉及oracle数据库的小项目 我有下表 CUSTOMER Cid CName City Discount PRODUCT Pid PName City Quantity Price ORDERS OrderNo Month C
  • 计算从左上角到右下角任意方向移动的移动次数

    我在面试中遇到了一个问题 这是我发现的类似问题 所以我想在这里问 问题是 有一个机器人位于 N X N 网格中的 1 1 处 机器人可以向左 右 上 下任意方向移动 我还得到了一个整数 k 它表示路径中的最大步数 我必须计算以 k 或更少的
  • OverflowError Python int 太大,无法转换为 C long

    usr bin python import sys math n input enter a number to find the factors j flag b 0l False 0l for b in xrange 1 n 1 a n
  • 如何在android中设置ListView所选项目交替文本颜色

    我有一个带有图像视图和文本视图的自定义列表视图 我希望当用户选择一个项目时 文本视图颜色应该改变 而所有其他文本视图应该保持默认 这是我的 xml 列表视图 xml
  • 带代理的 Selenium 返回空网站

    我无法通过代理从使用 selenium 的网站获取页面源 HTML 这是我的代码 from selenium webdriver chrome options import Options from selenium import webd
  • VS 2008 Intellisense 右键单击​​时挂起

    我在 Visual Studio 2008 SP1 中有一个相当大的 C 解决方案 当我右键单击时 我在状态栏中看到更新的智能感知 整个工作室冻结了几分钟 2005 年右键单击效果很好 有什么解决方法吗 在大型项目上更新智能感知只会降低生产
  • 使用 fusedLocationAPI.requestLocationUpdates 不会调用 onLocationChanged

    我一直在尝试使用 fusedLocationApi 来获取我当前的位置 我正在使用带有模拟 Nexus 6 的 android studio 根据在线文档https developer android com training locati
  • Crontab - 简单的 echo 未运行

    我有这样的情况 我想在 Linux 服务器上使用 crontab 安排一个作业 我不是超级用户 所以我只编辑 使用 crontab l 编辑器 vim 我的 crontab 文件 为了测试 我放在那里 echo asdf 并且该作业没有运行
  • C++ 模板继承方案

    我想知道我的编码方式是否正确 我可以创建一个继承模板类的模板类吗 如果可以的话 以下代码是否正确 template
  • 从 HTML5 Canvas 导出矢量图形

    我很好奇这可能吗 我有兴趣在 HTML5 中构建一个矢量绘图应用程序 它能够保存为矢量 而不仅仅是 JPG PNG BMP Thanks 不 这是不可能的 绘图操作完成后 剩下的一切都在canvas是一堆像素 您必须保留所有绘图选项 然后使
  • 在 Visual Studio 中创建 hpp 文件

    当我要使用 Visual Studio 将新文件添加到项目中并且我希望它是 hpp only h文件可用 如何创建 hpp files 添加新文件时 您可以将扩展名更改为您想要的任何内容 只需将名称从 Header h 或它为您提供的任何默
  • Java HttpURLConnection - 带 Cookie 的 POST

    我正在尝试发送带有 cookie 的发布请求 这是代码 try String query URLEncoder encode key UTF 8 URLEncoder encode value UTF 8 String cookies se
  • 反序列化时二进制流“0”不包含有效的 BinaryHeader 错误

    在过去两天寻找这个问题的答案后 我希望这里有人能提供帮助 我使用 VS2012 用 c 编写了一个程序 该程序使用 BinaryFormatter 保存用户的项目数据 以将可序列化的类序列化为 Stream 然后再将其保存到文件中 该程序已
  • JavaScript 数组上的 getter/setter?

    有没有办法在数组上获取 设置行为 我想象这样的事情 var arr one two three var arr new Array for var i 0 i lt arr length i arr i defineGetter value
  • 如何从 ngModel 渲染 HTML 标签?

    我使用 AngularJS 将 JS 变量绑定到我的 HTML 内容 它工作得很好 JS var app angular module Tabs controller TabsController scope function scope
  • 如何以唯一的顺序对数组进行排序

    给定一个数组 var myList Normal Urgent Alert Casual Follow up 我想以下拉菜单的形式输出这个列表 我想 Urgent 首先出现 然后是 Alert 其余的应按字母顺序排序 我知道我可以按字母顺序
  • 如何在 Hapi 中获取请求的完整 URL

    在我的 hapijs 应用程序中 给定Request object http hapijs com api request object 如何找到原始的 未解析的 未修改的 URL function getRequestUrl reques