如何在 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 的相关文章

  • PHP 中的encodeURI() ?

    PHP 中是否有一些不编码的encodeURI 函数 我现在用这个 function encodeURI url http php net manual en function rawurlencode php https develope
  • 将 url 重定向到带有尾随点的主页

    Google 网站管理员显示一些重复的网址 他们是 www abc com index php option com toys view detail n id 148 ite www abc com index php option co
  • 电话呼叫的 URL 方案

    就像 mailto URL 前缀启动用户的默认邮件程序并使用指定地址启动新电子邮件一样 是否有类似的 URL 方案可以发起电话呼叫 也许是 电话 呼叫 或 啜饮 顺便说一句 我的目标是使用 Cisco CUPS 的平台 因此可能有一种特定于
  • 在 Snakemake 规则中使用 Github URL 进行包装

    我知道在 Snakefile 中定义基于包装器的规则的三种工作方法 rule way1 wrapper repository wrapper 0 0 8 bio samtools sort rule way2 local relative
  • 使用 JavaScript 更改网址栏中的域名

    有没有办法使用window history pushState或者任何其他js函数来更改地址栏中的整个url 我无法删除根部分 上下文 我的应用程序位于 Heroku 上 网址如下所示http mywebsite herokuapp com
  • Flutter Web URL 路由不适用于真实域

    我正在尝试使用一个网址来获取参数并将该参数分配给网络文件内的变量 例如 我的域名是 example com 在这个网站中我需要用户的 ID 我想制作 example com id 123 并获取 123 id 并给出变量 123 值 在 f
  • Apache 重写 - 获取 PHP 中的原始 URL

    我在 nginx 或 Apache 中重写了这个地址 http domain com hello 到像这样的脚本 http domain com test php ref hell 如何在 PHP 中访问这个重写的 URL 因为 如果我使用
  • Yii 框架:控制器/操作 url 和参数

    在我的申请中 我有ApiController with actionUsers 所以在 YII 中路径变成api users 现在为了获取某些用户信息 我使用以下路径api users id 10其中 10 是用户 ID id路径的一部分基
  • Web 应用程序中的 PathLocationStrategy 与 HashLocationStrategy

    使用的优点和缺点是什么 PathLocationStrategy 默认的 HTML 5 PushState 样式 HashLocationStrategy 哈希 URL 样式 例如 使用哈希位置策略将阻止通过 ID 滚动到元素的功能 但某些
  • 使用 Beautifulsoup 和正则表达式提取 10-K Edgar 文件中的文本

    我想从大约 10000 个文件中自动提取 1A 风险因素 部分并将其写入 txt 文件 可以找到带有文件的示例 URLhere https www sec gov Archives edgar data 1800 0001047469190
  • 如何将 URL 参数转换为 JavaScript 对象? [复制]

    这个问题在这里已经有答案了 我有一个像这样的字符串 abc foo def 5Basf 5D xyz 5 我怎样才能将它转换成这样的 JavaScript 对象呢 abc foo def asf xyz 5 到了 2021 年 请认为这个已
  • URL 哈希在重定向之间持续存在

    由于某种原因 当发送服务器端重定向 使用 Location 标头 时 非 IE 浏览器似乎会保留 URL 哈希 如果存在 例子 a simple redirect using Response Redirect http www yahoo
  • Jekyll + GitHub Pages 网站中的尾部斜杠导致 404

    我希望在我的网站上解析以下所有 URL 该网站是使用 Jekyll 构建并托管在 GitHub Pages 上的 https michaeledelstone com about https michaeledelstone com abo
  • Hapijs 在一个连接上同时使用 Http 和 Https

    New to Hapijs http hapijs com 并尝试使用它来创建一个应用程序 该应用程序对所有请求使用 HTTPS 并将 HTTP 重定向到安全连接 问题是应用程序进入 HTTPS 模式没有问题 但如果我将 URL 更改为 H
  • 使用 Javascript 在前端创建基本 URL(开发、API 和生产)

    无论开发和部署如何 如何制作适用于 http https localhost 端口和实际域的基本 url 我想创建一个可以在所有场景或条件下工作的基本 url 无论 http https 协议 端口 本地主机和实际域如何 无论是在开发中还是
  • 如何使用 .htaccess 为多个参数创建干净的 url

    这是我的 htaccess 代码 用于重写干净的 url Options FollowSymLinks MultiViews Turn mod rewrite on RewriteEngine On RewriteBase RewriteC
  • Rails 3:使用 AJAX 请求更新 URL 参数

    我有一个过滤器和一个产品列表 id 名称 创建日期 我可以按 ID 名称或创建日期进行过滤 通过 AJAX 请求 我更新了内容 div 但显然 URL 没有改变 如何将参数附加到 URL 例如 localhost 3000 dashboar
  • 如何从网址中删除查询?

    我正在使用 scrapy 抓取一个网站 该网站似乎将随机值附加到每个 URL 末尾的查询字符串 这将爬行变成了一种无限循环 我如何让 scrapy 忽略 URL 的查询字符串部分 See urllib urlparse http docs
  • Google 地图 API 标记图标 URL?

    我正在尝试将标记图标更改为 红圈 或 红针 或其他任何内容 在这些代码中 markerOptions icon images beachflag png 标记不显示 但如果我做icon一行注释行 因此标记显示为 red pin icon 所
  • jquery构建http查询字符串

    我有一个这样的对象 Object id myid token sometoken 我需要构建一个 HTTP 查询字符串并得到如下内容 http domain com file html id myid token sometoken 我有什

随机推荐

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

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 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