Chromium / Chrome không lưu trữ các yêu cầu DNS thực sự hơn một phút.
Thật thú vị, từ lỗi-crom - Số 164026 - DNS TTL không được vinh danh từ ngày 21 tháng 4 năm 2011
Bộ đệm DNS duy nhất trong hệ thống là chrome và nó không tôn trọng TTL. Chúng ta cần sửa chrome và / hoặc thêm bộ đệm trung gian xử lý chính xác TTL.
Trả lời trong vé ngày 4 tháng 12 năm 2012:
HostCache hiện giả định TTL = 60s cho tất cả các kết quả dương tính. Với trình phân giải DNS không đồng bộ, chúng tôi dự định sử dụng TTL = max (60s, server_Vported_ttl), tức là, ít nhất là 60 giây. Lý do là để cải thiện hiệu suất bộ đệm. (Khi CDN NS cung cấp TTL = 10-20 giây và phải mất 30 giây để tìm nạp tất cả các nguồn con, chúng tôi thường phải truy vấn lại cho cùng tên máy chủ trong một lần tải trang.)
Vé đóng cửa vào ngày 10 tháng 10 năm 2013 như:
Chrome trên CrOS sử dụng trình phân giải DNS không đồng bộ, vinh danh TTL = max (60s,> server_Vported_ttl)
Tôi sẽ đóng cái này dưới dạng WontFix (lỗi thời / hoạt động như dự định).
Đây là một vấn đề được biết đến trong nhiều năm; trình phân giải DNS nội bộ của họ bỏ qua các bản ghi DNS của DNS và chỉ lưu các yêu cầu DNS trong 1 phút.
Người dùng đã yêu cầu trong nhiều năm, một tính năng để thay đổi hành vi mặc định đó và Google không bao giờ tạo ra một hành vi.
Trước đây, bạn có thể vô hiệu hóa trình phân giải DNS nội bộ chrome://flags
, ngày nay chức năng đó không còn bị lộ nữa.
Vì vậy, tóm tắt nó, nó là một tính năng, ví dụ như nó làm điều đó bằng thiết kế.
(Ban đầu tôi đã viết nó không bao giờ có thể thay đổi, điều này rõ ràng là không đúng. Một người thực sự quyết tâm có thể biên dịch lại Chromium hoặc hack các tệp nhị phân của Chrome.).
Vì vậy, như một adenda: có rất nhiều tài liệu bằng chứng kỹ sư của Google không có ý định tôn trọng TTL mặc định trong nhận câu trả lời DNS trong Chrome / ium.
Từ bộ nhớ đệm tiêu cực của truy vấn DNS (DNS NCACHE)
Như với các phản hồi tích cực trong bộ nhớ cache, bộ giải quyết sẽ giới hạn trong bao lâu nó sẽ lưu trữ một phản hồi tiêu cực ...
Mặc dù nó được ngụ ý rằng trình phân giải có thể / nên áp đặt giới hạn tối đa cho câu trả lời DNS lưu trữ, nhưng giới hạn 1 phút trên Google Chrome có thể quá thấp.
PS Tôi thực sự đã phát hiện ra câu trả lời cho một cái gì đó đã làm tôi khó chịu trong nhiều năm trong khi lấy số liệu thống kê Chrome để trả lời câu hỏi này: Chrome: Yêu cầu DNS với tên DNS ngẫu nhiên: phần mềm độc hại?
PPS Từ mã dưới đây, rõ ràng các câu trả lời phủ định không được lưu trong bộ nhớ cache (TTL = 0).
Từ https://chromium.googlesource.com/chromium/src/net/dns/host_resolver_impl.cc
99 // Default TTL for successful resolutions with ProcTask.
100 const unsigned kCacheEntryTTLSeconds = 60;
101
102 // Default TTL for unsuccessful resolutions with ProcTask.
103 const unsigned kNegativeCacheEntryTTLSeconds = 0;
104
105 // Minimum TTL for successful resolutions with DnsTask.
106 const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
1518 // Called by ProcTask when it completes.
1519 void OnProcTaskComplete(base::TimeTicks start_time,
1520 int net_error,
1521 const AddressList& addr_list) {
1522 DCHECK(is_proc_running());
1523
1524 if (dns_task_error_ != OK) {
1525 base::TimeDelta duration = base::TimeTicks::Now() - start_time;
1526 if (net_error == OK) {
1527 UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackSuccess", duration);
1528 if ((dns_task_error_ == ERR_NAME_NOT_RESOLVED) &&
1529 ResemblesNetBIOSName(key_.hostname)) {
1530 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_SUSPECT_NETBIOS);
1531 } else {
1532 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_PROC_SUCCESS);
1533 }
1534 base::UmaHistogramSparse("Net.DNS.DnsTask.Errors",
1535 std::abs(dns_task_error_));
1536 resolver_->OnDnsTaskResolve(dns_task_error_);
1537 } else {
1538 UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackFail", duration);
1539 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_FAIL);
1540 }
1541 }
1542
1543 if (ContainsIcannNameCollisionIp(addr_list))
1544 net_error = ERR_ICANN_NAME_COLLISION;
1545
1546 base::TimeDelta ttl =
# always 0 seconds
1547 base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds);
1548 if (net_error == OK)
# always 60 seconds
1549 ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);
1550
1551 // Source unknown because the system resolver could have gotten it from a
1552 // hosts file, its own cache, a DNS lookup or somewhere else.
1553 // Don't store the |ttl| in cache since it's not obtained from the server.
1554 CompleteRequests(
1555 MakeCacheEntry(net_error, addr_list, HostCache::Entry::SOURCE_UNKNOWN),
1556 ttl);
1557 }