Lưu vào bộ nhớ đệm

Tài liệu này áp dụng cho các phương thức sau:

Giới thiệu về chức năng lưu vào bộ nhớ đệm

Để giảm mức sử dụng băng thông của ứng dụng và bảo vệ Google khỏi mức tăng đột biến lưu lượng truy cập, các ứng dụng của cả API Tra cứu và API Cập nhật đều phải tạo và duy trì bộ nhớ đệm cục bộ chứa dữ liệu về mối đe doạ. Đối với Lookup API, bộ nhớ đệm được dùng để giảm số lượng yêu cầu threatMatches mà ứng dụng gửi tới Google. Đối với API cập nhật, bộ nhớ đệm được dùng để giảm số lượng yêu cầu fullHashes mà ứng dụng gửi tới Google. Giao thức lưu vào bộ nhớ đệm cho mỗi API được nêu bên dưới.

API tra cứu

Ứng dụng của API Tra cứu phải lưu từng mục ThreatMatch được trả về vào bộ nhớ đệm trong thời lượng do trường cacheDuration xác định. Sau đó, ứng dụng cần tham khảo bộ nhớ đệm trước khi gửi yêu cầu threatMatches tiếp theo đến máy chủ. Nếu thời lượng bộ nhớ đệm cho ThreatMatch được trả về trước đó chưa hết hạn, thì máy khách sẽ cho rằng mục đó vẫn không an toàn. Việc lưu các mục ThreatMatch vào bộ nhớ đệm có thể làm giảm số lượng yêu cầu API mà ứng dụng gửi.

Ví dụ: mối đe doạ.find

Nhấp vào các đường liên kết yêu cầu và phản hồi trong tiêu đề bảng để xem các ví dụ đầy đủ.

Kiểm tra URL
Yêu cầu đe doạ
URL khớp
Phản hồi về mối đe doạ
Hành vi lưu vào bộ nhớ đệm
"threatEntries": [
 {"url": "http://www.urltocheck.org/"}
]
"matches": [{
 "threat": {"url": "http://www.urltocheck.org/"},
 "cacheDuration": "300.000s"
}]
So khớp.
Khách hàng phải đợi 5 phút trước khi gửi yêu cầu threatMatches mới có URL http://www.urltocheck.org/.

Cập nhật API

Để giảm tổng số lượng yêu cầu fullHashes được gửi đến Google bằng API Cập nhật, ứng dụng phải duy trì bộ nhớ đệm cục bộ. API thiết lập hai loại phương pháp lưu vào bộ nhớ đệm: dương tính và phủ định.

Lưu vào bộ nhớ đệm tích cực

Để ngăn ứng dụng liên tục hỏi về trạng thái của một hàm băm cụ thể không an toàn, mỗi hàm băm trả về ThreatMatch sẽ chứa thời lượng bộ nhớ đệm dương (do trường cacheDuration xác định). Hàm này cho biết khoảng thời gian hàm băm đầy đủ bị coi là không an toàn.

Lưu vào bộ nhớ đệm âm

Để ngăn ứng dụng liên tục yêu cầu về trạng thái của một hàm băm đầy đủ an toàn cụ thể, mỗi phản hồi fullHashes sẽ xác định thời lượng bộ nhớ đệm âm cho tiền tố được yêu cầu (do trường negativeCacheDuration xác định). Khoảng thời gian này cho biết khoảng thời gian mà tất cả hàm băm đầy đủ có tiền tố được yêu cầu được coi là an toàn đối với danh sách được yêu cầu, ngoại trừ những hàm được máy chủ trả về là không an toàn. Việc lưu vào bộ nhớ đệm này đặc biệt quan trọng vì nó giúp ngăn chặn tình trạng quá tải lưu lượng truy cập có thể do xung đột tiền tố băm với một URL an toàn nhận được nhiều lưu lượng truy cập.

Tham khảo bộ nhớ đệm

Khi muốn kiểm tra trạng thái của một URL, trước tiên, ứng dụng sẽ tính toán hàm băm đầy đủ của URL đó. Nếu tiền tố của hàm băm đầy đủ có trong cơ sở dữ liệu cục bộ, thì máy khách nên tham khảo bộ nhớ đệm trước khi gửi yêu cầu fullHashes đến máy chủ.

Trước tiên, máy khách nên kiểm tra xem có lượt truy cập tích cực vào bộ nhớ đệm hay không. Nếu tồn tại một mục nhập bộ nhớ đệm tích cực chưa hết hạn cho hàm băm về mối quan tâm đầy đủ, thì mục này sẽ bị coi là không an toàn. Nếu mục nhập bộ nhớ đệm tích cực đã hết hạn, ứng dụng phải gửi yêu cầu fullHashes cho tiền tố cục bộ được liên kết. Theo giao thức, nếu máy chủ trả về hàm băm đầy đủ, thì máy chủ sẽ bị coi là không an toàn; nếu không thì sẽ được coi là an toàn.

Nếu không có mục nhập bộ nhớ đệm tích cực nào cho hàm băm đầy đủ, máy khách nên kiểm tra lượt truy cập bộ nhớ đệm âm. Nếu có một mục nhập bộ nhớ đệm phủ định chưa hết hạn cho tiền tố cục bộ đã liên kết, thì toàn bộ hàm băm sẽ được coi là an toàn. Nếu mục nhập bộ nhớ đệm phủ định đã hết hạn hoặc không tồn tại, thì máy khách phải gửi yêu cầu fullHashes cho tiền tố cục bộ được liên kết và diễn giải phản hồi như bình thường.

Cập nhật bộ nhớ đệm

Bạn cần cập nhật bộ nhớ đệm của ứng dụng bất cứ khi nào nhận được phản hồi fullHashes. Bạn phải tạo hoặc cập nhật một mục nhập bộ nhớ đệm tích cực cho hàm băm đầy đủ theo trường cacheDuration. Bạn cũng nên tạo hoặc cập nhật thời lượng bộ nhớ đệm âm của tiền tố băm theo trường negativeCacheDuration của phản hồi.

Nếu yêu cầu fullHashes tiếp theo không trả về hàm băm đầy đủ hiện đang được lưu vào bộ nhớ đệm tích cực, thì máy khách không cần phải xoá mục nhập bộ nhớ đệm khẳng định. Trên thực tế, điều này không đáng lo ngại vì thời lượng bộ nhớ đệm dương thường thường ngắn (vài phút) để có thể khắc phục nhanh kết quả dương tính giả.

Tình huống ví dụ

Trong ví dụ sau, giả sử h(url) là tiền tố băm của URL và H(url) là hàm băm đủ độ dài của URL. Tức là, h(url) = SHA256(url).substr(4), H(url) = SHA256(url).

Bây giờ, giả sử một ứng dụng (có bộ nhớ đệm trống) truy cập example.com/ và thấy rằng h(example.com/) nằm trong cơ sở dữ liệu cục bộ. Máy khách yêu cầu hàm băm đủ thời lượng cho tiền tố băm h(example.com/) và nhận lại hàm băm có độ dài đầy đủ H(example.com/) cùng với thời lượng bộ nhớ đệm dương là 5 phút và thời lượng bộ nhớ đệm âm là 1 giờ.

Thời lượng bộ nhớ đệm tích cực là 5 phút cho ứng dụng khách biết khoảng thời gian hàm băm đủ thời lượng H(example.com/) phải được coi là không an toàn nếu không gửi một yêu cầu fullHashes khác. Sau 5 phút, ứng dụng phải đưa ra một yêu cầu fullHashes khác cho tiền tố h(example.com/) nếu ứng dụng đó truy cập lại example.com/. Ứng dụng nên đặt lại thời lượng bộ nhớ đệm âm của tiền tố băm cho mỗi phản hồi mới.

Thời lượng bộ nhớ đệm âm là 1 giờ sẽ cho ứng dụng biết khoảng thời gian mà tất cả các hàm băm có độ dài đầy đủ khác ngoài H(example.com/) có cùng tiền tố h(example.com/) phải được coi là an toàn. Trong khoảng thời gian 1 giờ, mọi URL sao cho h(URL) = h(example.com/) phải được coi là an toàn và do đó, sẽ không dẫn đến yêu cầu fullHashes (giả sử rằng H(URL) != H(example.com/)).

Nếu phản hồi fullHashes chứa 0 kết quả trùng khớp và thời lượng bộ nhớ đệm âm được đặt, thì ứng dụng không được đưa ra bất kỳ yêu cầu fullHashes nào cho bất kỳ tiền tố nào được yêu cầu trong thời lượng bộ nhớ đệm âm nhất định.

Nếu phản hồi fullHashes chứa ít nhất một kết quả trùng khớp, thì thời lượng bộ nhớ đệm âm vẫn được đặt cho toàn bộ phản hồi. Trong trường hợp đó, thời lượng bộ nhớ đệm của một hàm băm đầy đủ cho biết khoảng thời gian ứng dụng giả định rằng hàm băm có thời lượng đầy đủ cụ thể đó là không an toàn. Sau khi thời lượng bộ nhớ đệm ThreatMatch kết thúc, ứng dụng phải làm mới hàm băm đủ thời lượng bằng cách gửi yêu cầu fullHashes cho tiền tố hàm băm đó nếu URL được yêu cầu khớp với hàm băm đủ thời lượng hiện có trong bộ nhớ đệm. Trong trường hợp đó, thời lượng bộ nhớ đệm âm sẽ không áp dụng. Thời lượng bộ nhớ đệm âm của phản hồi chỉ áp dụng cho các hàm băm có độ dài đầy đủ không có trong phản hồi fullHashes. Đối với các hàm băm đủ thời lượng không có trong phản hồi, ứng dụng phải hạn chế gửi bất kỳ yêu cầu fullHashes nào cho đến khi hết thời lượng bộ nhớ đệm âm.

Ví dụ: fullHashes.find

Nhấp vào các đường liên kết yêu cầu và phản hồi trong tiêu đề bảng để xem các ví dụ đầy đủ.

Tiền tố hàm băm
Yêu cầu fullHashes
So khớp hàm băm đầy đủ độ dài
Phản hồi fullHashes
Hành vi lưu vào bộ nhớ đệm
"threatEntries": [
  {"hash": "0xaaaaaaaa"}
]
"matches": [],
"negativeCacheDuration": "3600.000s"
Không trùng khớp.
Ứng dụng không được gửi bất kỳ yêu cầu fullHashes nào cho tiền tố băm 0xaaaaaaaa trong ít nhất 1 giờ. Mọi hàm băm có tiền tố 0xaaaaaaaa sẽ được coi là an toàn trong một giờ.
"threatEntries": [
  {"hash": "0xbbbbbbbb"}
]
"matches": [
 "threat": {"hash": "0xbbbbbbbb0000..."}
 "cacheDuration": "600.000s",
],
"negativeCacheDuration": "300.000s"
Các kết quả có thể trùng khớp.
Khách hàng nên coi URL có hàm băm đầy đủ là 0xbbbbbbbb0000... không an toàn trong 10 phút. Khách hàng nên xem tất cả các URL khác có tiền tố băm 0xbbbbbbbb là an toàn trong 5 phút. Sau 5 phút, mục nhập bộ nhớ đệm phủ định của tiền tố băm sẽ hết hạn. Vì mục nhập bộ nhớ đệm tích cực cho 0xbbbbbbbb0000... chưa hết hạn, nên ứng dụng cần gửi các yêu cầu fullHashes cho tất cả hàm băm, ngoại trừ mục đó.
"threatEntries": [
  {"hash": "0xcccccccc"}
]
"matches": [
 "threat": {"hash": "0xccccccccdddd..."},
 "cacheDuration": "600.000s"
],
"negativeCacheDuration": "3600.000s"
Các kết quả có thể trùng khớp.
Ứng dụng không được gửi bất kỳ yêu cầu fullHashes nào cho tiền tố băm 0xcccccccc trong ít nhất 1 giờ và giả định rằng tiền tố đó là an toàn – ngoại trừ khi hàm băm đầy đủ của URL khớp với hàm băm đầy đủ đã lưu vào bộ nhớ đệm 0xcccccccdddd.... Trong trường hợp đó, khách hàng nên cho rằng URL đó không an toàn trong 10 phút. Sau 10 phút, hàm băm đủ thời lượng sẽ hết hạn. Mọi hoạt động tra cứu tiếp theo cho hàm băm đầy đủ đó sẽ kích hoạt yêu cầu fullHashes mới.