为什么浏览器中发送两个请求在同一页面时,它的刷新?(Why does a browser send

2019-07-19 14:07发布

我创建了一个简单的Node.js应用程序,它记录到控制台当前request.url为每个传入的HTTP请求。 当我刷新浏览器页面上的Mac OS X ML,我收到了同一页面两个请求。 为什么?

相比之下,当我使用卷曲 ,并要求在同一页,我收到只有一个请求。 同一个请求,如果我刷新Safari中的页面。

为什么Chrome传送两个请求在同一页?

编辑:我已经看了到request.headers ,发现一个区别: accept头。

下面是第一请求的报头中。 请注意,它接受特定的默剧的名单。

{ host: 'www.pulsr.local:1337',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  cookie: 'PULSRSESSID=BBtDAWMVgbQZ8lXA6wv4Wg/vwwI=; PULSRSESSID=dsGxP494UxJueit2/u79AFiM5fw=' }

下面是第二请求。 这一次, 接受一切

{ host: 'www.pulsr.local:1337',
  connection: 'keep-alive',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',
  accept: '*/*',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
  cookie: 'PULSRSESSID=VGWRSG9zIokHjA2vLa1b+/fUqu8=; PULSRSESSID=dsGxP494UxJueit2/u79AFiM5fw=' }

编辑2:我检查了,看看这两个请求是GET请求。

Answer 1:

我认为这是与此有关的bug在Chrome那里它发送的每个请求的图标的请求。 Firefox和其他浏览器做到这一点他们的第一个请求,但缓存它。



Answer 2:

作为另一个发现答案 ,它可以通过空造成的src上的图像或iFrame属性。 这样做只有1页刷新时,从铬, - 确切的同一页上4个请求 - 不是在图标:我有同样的问题。 就我而言,我发现这是由于空href的属性link标签:

<link rel="shortcut icon" href="" />
<link rel="icon" type="image/x-icon" href="" />
<link rel="icon" type="image/png" href="" />

因此,对于我的页面重载1级的要求,并为每个上述3个环节的1个请求。



文章来源: Why does a browser send two requests for the same page when it's refreshed?