Node和Express - 获取请求网址

时间:2016-05-04 19:26:24

标签: node.js express

我正在使用Express的Node应用程序。在这个应用程序中,我需要获得整个网址。例如,如果用户访问<a href="#" title="Play video" class="play"></a> <h1>CSS3 Play/Pause button</h1> <span class="headline">click/touch the button to see the animation.</span>,我需要在代码中看到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对象本身应该有一些东西可以给我完整的URL。有什么东西,我只是忽略它吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您知道,浏览器不会向$histfile发出请求。相反,浏览器会解析协议和域。然后,它在DNS中查找域以获取IP地址,然后与该IP地址建立TCP连接。然后,它使用所需的协议在该TCP套接字上发送请求。由于这是HTTP协议,因此它可能是GET请求,GET请求将包含标准HTTP标头以及正在请求的路径名和查询参数(如果有)。 GET请求本身不包含原始URL。

根据HTTP specification,浏览器必须包含“主机”标题,该标题会告诉您最初要求的主机名。这就是你使用http://somedomain.com/somepath获得的,并且是获取主机名的方式。

因此,除非您可以更改请求的发件人以包含包含完整和原始URL的自定义标头字段,否则您已经在为标准HTTP请求执行重建此请求的URL表示的操作。

HTTP请求不要求EVER发送整个原始URL。

如果您提前了解协议和域(已知许多主机位于特定域中),那么您可以根据需要对域进行硬编码:

req.get("host")

但是,如果您的代码曾在其他域上使用过,那么这不太可能与您已经在做的事情产生很大的不同,而且您已经在做的事情更具可移植性。