我正在使用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。有什么东西,我只是忽略它吗?
谢谢!
答案 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")
但是,如果您的代码曾在其他域上使用过,那么这不太可能与您已经在做的事情产生很大的不同,而且您已经在做的事情更具可移植性。