Etag

Etag zur Überprüfung des Datenstroms auf Änderung, theoretisch ist hier jede Prüfsumme möglich, bei mir kommt crc32 zum Einsatz, zuvor hatte ich md5 genutzt jedoch ist crc32 wesentlich schneller außerdem braucht man den Wert sowieso für den GZIP-Header.

Etag Generierung aus CRC32 und Size:

function EtagCRC32(const buf: PChar; const len: cardinal): RawByteString;
var crc: longword;
begin
  crc := crc32(0, buf, len);
  result := IntToHex(crc, 8) + IntToHex(len, 8);
end;

Etag Generierung aus MD5:

function EtagMD5(const buf: PChar; const len: cardinal): RawByteString;
begin
  result := MD5Print(MD5Buffer(buf, len))
end;

 Der Etag muss im Header in Anführungszeichen stehen.

'Etag: "' + Etag + '"'#13#10