You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chromium内核浏览器无协议URL请求3秒后重发问题咨询

相关但非重复问题:Chrome在3秒后取消URL_REQUEST请求
=> 该问题被错误标记为已解决,本文补充新信息以探究原因。

核心总结与问题:

当访问未携带http(s)://协议的URL时,Chromium内核浏览器会取消耗时超过3秒的请求并重新发起一次,导致服务器收到两次请求(详见下方详细日志)。

  • a) 是否有办法修改该行为?
    即能否让Chromium内核浏览器“等待更长时间”,而非取消请求后重发。
  • b) 如何处理或避免该问题?(当然,除了优化URL性能之外)

发现与总结:

  • 该问题仅出现在Chromium内核浏览器中(如Google Chrome、Microsoft Edge等)
  • 仅当访问未指定协议(scheme)http://或https://的URL时才会出现
  • 无论域名是否配置http->https重定向,该问题都会发生(详见下方详细日志)
  • 该问题与HSTS无关:测试显示启用HSTS后,Chrome仅会将301/302的http->https重定向替换为307内部重定向
  • 该问题在HTTP/1和HTTP2协议下均会出现(已在两台不同服务器测试)
  • 仅当初始请求耗时至少3秒时才会出现该问题

详细日志:

1. 全局虚拟主机未配置HTTP => HTTPS重定向

Chrome地址栏请求http

# Apache日志
[24/May/2024:15:35:54] 1.2.3.4 - www.example.com:443 "GET /testing HTTP/1.1" 200 "www.example.com/testing" bytes:34 time:4042159
[24/May/2024:15:35:57] 1.2.3.4 - www.example.com:80  "GET /testing HTTP/1.1" 200 "www.example.com/testing" bytes:34 time:4027890
[24/May/2024:15:36:01] 1.2.3.4 - www.example.com:80  "GET /favicon.ico HTTP/1.1" 200 "www.example.com/favicon.ico" bytes:0 time:326

# PHP日志
[2024-05-24 15:35:54.478306] 1.2.3.4 local.INFO: [REQUESTED_AT_15:35:54.477500] [https://www.example.com/testing] Request received, now I will wait 4 s
[2024-05-24 15:35:57.290657] 1.2.3.4 local.INFO: [REQUESTED_AT_15:35:57.290000] [http://www.example.com/testing]  Request received, now I will wait 4 s
[2024-05-24 15:35:58.478763] 1.2.3.4 local.INFO: [REQUESTED_AT_15:35:54.477500] [https://www.example.com/testing] Done, I waited 4 s! It is now 15:35:58.478700
[2024-05-24 15:36:01.291083] 1.2.3.4 local.INFO: [REQUESTED_AT_15:35:57.290000] [http://www.example.com/testing]  Done, I waited 4 s! It is now 15:36:01.291000

如您所见,15:35:54发送的请求尚未完成,但Chrome已发送另一个请求,导致服务器收到两次请求(可能引发重复操作等问题)。


2. 全局虚拟主机已配置HTTP => HTTPS重定向

Chrome地址栏请求httpS

# Apache日志
[24/May/2024:15:53:25] 1.2.3.4 - www.example.com:443 "GET /testing HTTP/1.1" 200 "www.example.com/testing" bytes:34 time:4244717
[24/May/2024:15:53:28] 1.2.3.4 - www.example.com:443 "GET /testing HTTP/1.1" 200 "www.example.com/testing" bytes:34 time:4040528
[24/May/2024:15:53:32] 1.2.3.4 - www.example.com:443 "GET /favicon.ico HTTP/1.1" 200 "www.example.com/favicon.ico" bytes:0 time:364

# PHP日志
[2024-05-24 15:53:25.953574] 1.2.3.4 local.INFO: [REQUESTED_AT_15:53:25.948300] [https://www.example.com/testing] Request received, now I will wait 4 s
[2024-05-24 15:53:28.739584] 1.2.3.4 local.INFO: [REQUESTED_AT_15:53:28.738700] [https://www.example.com/testing] Request received, now I will wait 4 s
[2024-05-24 15:53:29.954046] 1.2.3.4 local.INFO: [REQUESTED_AT_15:53:25.948300] [https://www.example.com/testing] Done, I waited 4 s! It is now 15:53:29.954000
[2024-05-24 15:53:32.740055] 1.2.3.4 local.INFO: [REQUESTED_AT_15:53:28.738700] [https://www.example.com/testing] Done, I waited 4 s! It is now 15:53:32.739900

最小复现示例(MRE):

  • 打开Chromium内核浏览器
  • 打开开发者工具的Network标签
  • 粘贴“慢”URL,不带http://或https://(例如:www.example.net/)
  • 按下回车键,确认以下行为:
    • 发送第一个请求
    • 3秒后,浏览器取消该请求并重新发起一个请求

(以下是Laravel代码,但普通PHP也能复现该问题)

<?php 
Route::get('/testing', function () {
    $u = url()->full();
    $s = 4;

    $now = DateTime::createFromFormat('U.u', microtime(true));
    $t = $now->format("H:i:s.u");
    Log::info("[REQUESTED_AT_$t] [$u] Request received, now I will wait $s s");

    sleep($s);

    $now = DateTime::createFromFormat('U.u', microtime(true));
    $t2 = $now->format("H:i:s.u");
    Log::info("[REQUESTED_AT_$t] [$u] Done, I waited $s s! It is now $t2");

    echo "Page loaded, OK";
});

无需真实“慢”URL,只需限制网络速度即可复现该问题。


内容的提问来源于stack exchange,提问作者4wk_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:05:05