Node.js 如果在https中,则无法使用req.get(';referer';)获取完整路径

Node.js 如果在https中,则无法使用req.get(';referer';)获取完整路径,node.js,express,Node.js,Express,我用express构建了一个简单的统计脚本,它使用一个1像素的图像来统计网页中的访问者。所以我们有两个快速脚本,一个带有计数器,另一个来自正在计数的网站(我们称之为计数器..和网站) 计数器通过以下路径生成像素: app.get("/p",(req, res) => { // code in the website HTML template <img src="http://localhost:3001/p" height="

我用express构建了一个简单的统计脚本,它使用一个1像素的图像来统计网页中的访问者。所以我们有两个快速脚本,一个带有计数器,另一个来自正在计数的网站(我们称之为计数器..和网站)

计数器通过以下路径生成像素:

 app.get("/p",(req, res) => {
  // code in the website  HTML template <img src="http://localhost:3001/p" height="1" width="1">
      res.writeHead(200, {
        'Content-Type': 'image/gif',
        'Content-Length': counterImg.length
      })

  let siteID = req.query.s;

  var ref = req.get('Referrer')

  console.log (“Ref is" + ref)
app.get(“/p)”,(请求、回复)=>{
//网站HTML模板中的代码
文书标题(200{
“内容类型”:“图像/gif”,
“内容长度”:counterImg.Length
})
让siteID=req.query.s;
var ref=req.get('referer')
console.log(“Ref是”+Ref)
目标是获取完整路径(不仅是主机,还有页面名)

当在本地进行测试时(在http://localhost 但端口不同)

如果要跟踪的站点托管在本地,但位于实时环境中,那么在两台服务器之间使用https://也可以正常工作。它只返回没有路径的引用域,例如site.com/而不是site.com/page1等

这是
req.get('referer')
的正常行为,还是因为nginx设置/https除了主机之外没有发送任何其他内容

本地对本地

Ref是http://localhost:3001/readme-页面

本地到HTTPS中的远程计数器

Ref是http://localhost:3001/

https到https相同…仅显示主机


Ref is

这是新的,但现在是预期的行为。我假设localhost得到特殊处理,这就是它在本地工作的原因

,这意味着当跨域请求发出时,
Referer
(sic)标头将仅包含引用站点的来源(即,无路径)

如果您希望将页面的完整路径发送到其他来源,则引用页面必须与或包含在HTML中一起发送

换句话说,您的跟踪像素应该如下所示:

<img src="https://example.com/p" referrerpolicy="no-referrer-when-downgrade" height="1" width="1">

非常感谢!这让我很生气:)在Chome上很好,但请注意:除非用户按照此处所述更改隐私设置,否则在Safari上不起作用