(crawler) Do not remove W/-prefix on weak e-tags

The server expects to get them back prefixed, as we received them.
This commit is contained in:
Viktor Lofgren 2024-12-27 20:56:42 +01:00
parent 0ca43f0c9c
commit 0d59202aca

View File

@ -20,34 +20,11 @@ public record ContentTags(String etag, String lastMod) {
public void paint(Request.Builder getBuilder) {
if (etag != null) {
getBuilder.addHeader("If-None-Match", ifNoneMatch());
getBuilder.addHeader("If-None-Match", etag);
}
if (lastMod != null) {
getBuilder.addHeader("If-Modified-Since", ifModifiedSince());
getBuilder.addHeader("If-Modified-Since", lastMod);
}
}
private String ifNoneMatch() {
// Remove the W/ prefix if it exists
//'W/' (case-sensitive) indicates that a weak validator is used. Weak etags are
// easy to generate, but are far less useful for comparisons. Strong validators
// are ideal for comparisons but can be very difficult to generate efficiently.
// Weak ETag values of two representations of the same resources might be semantically
// equivalent, but not byte-for-byte identical. This means weak etags prevent caching
// when byte range requests are used, but strong etags mean range requests can
// still be cached.
// - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
if (null != etag && etag.startsWith("W/")) {
return etag.substring(2);
} else {
return etag;
}
}
private String ifModifiedSince() {
return lastMod;
}
}