我正在开发一个使用 Express 的 Node 应用程序。在此应用程序中,我需要获取整个网址。例如,如果用户访问,我需要在我的代码中http://www.my-example.com/path/to-page查看。http://www.my-example.com/path/to-page目前,我在代码中使用以下内容:
this.url = req.protocol + '://' + req.get('host') + req.originalUrl
上述方法有效。然而,我注意到我的应用程序由于这一行而受到了几毫秒的影响。我不确定是因为字符串连接还是get函数请求。不管怎样,对象本身似乎应该有一些东西req可以给我完整的 URL。是不是有什么东西我只是忽略了?
谢谢!
如您所知,浏览器不会向http://somedomain.com/somepath. 相反,浏览器会解析协议和域。然后,它在 DNS 中查找域以获取 IP 地址,然后与该 IP 地址建立 TCP 连接。然后,它使用所需的协议在该 TCP 套接字上发送请求。由于这里是 HTTP 协议,因此它可能是 GET 请求,并且 GET 请求将包含标准 HTTP 标头以及正在请求的路径名和查询参数(如果有)。GET 请求本身不包含原始 URL。
根据HTTP 规范,浏览器需要包含“Host”标头,该标头告诉您最初请求的主机名。这就是您所得到的req.get("host"),也是获取主机名的方法。
因此,除非您可以更改请求的发送者以包含包含完整原始 URL 的自定义标头字段,否则您已经在执行标准 HTTP 请求可以执行的操作来重建此请求的 URL 表示形式。
HTTP 请求不要求发送整个原始 URL。
如果您提前知道协议和域(已知许多主机位于特定域上),那么您可以根据需要对域进行硬编码:
this.url = req.protocol + '://' + "myDomain.com" + req.originalUrl
Run Code Online (Sandbox Code Playgroud)
但是,这不太可能与您已经在做的事情产生太大区别,并且如果您的代码曾经在不同的域上使用过,那么您已经在做的事情会更具可移植性。
| 归档时间: |
|
| 查看次数: |
7189 次 |
| 最近记录: |