# ETag

Bir ETag, web sunucusu veya uygulamanız tarafından ayarlanan bir HTTP cevap başlığıdır (response header). Kaynağın durumuna karşılık gelen benzersiz bir değer içerir. Bu kaynak için benzersiz bir değer oluşturulmaktır. Bu değer, URL'ye ve kaynağın dahili değişiklik tarihine bağlı olarak bir **md5** veya **sha** değeri olabilir. Eşsiz olduğu sürece herhangi bir şey olabilir.

```http
HTTP/1.1 200 OK
Host: localhost
Etag: 7c9d70604c6061da9bb9377d3f00eb27
Content-type: text/html; charset=UTF-8
Hello world
```

Bir tarayıcı bu **ETag**'ı görür görmez değerini saklar. Bir sonraki istek üzerine, **ETag**'ın değeri sunucuya **If-None-Match** istek başlığında (request header) geri gönderilecektir.

```http
GET /if_none_match.php HTTP/1.1
Host: localhost
User-Agent: curl/7.48.0
If-None-Match: 7c9d70604c6061da9bb9377d3f00eb27
```

Sunucu bu **If-None-Match** başlığını alır ve değerin göndermek üzere olduğu **ETag**'den farklı olup olmadığını kontrol eder. **ETag** değeri Eşleşme Yok (**If-None-Match)** değerine eşitse, web sunucusu veya uygulamanız değerin değişmediğini belirtmek için bir **HTTP/1.1 304 Not Modified** yanıt başlığı döndürebilir.

```http
HTTP/1.0 304 Not Modified
Host: localhost
Etag: 7c9d70604c6061da9bb9377d3f00eb27
```

Tarayıcı 304'ü alır ve eski verileri çıkartabileceğini bilir. **If-None-Match** değeri **ETag** ile eşleşmiyorsa, web sunucusu veya uygulamanız **HTTP/1.1 200 OK** cevap başlığı ve elbette yeni **ETag** ile birlikte tam cevabı geri verecektir. Bu, kaynakları korumanın çok iyi bir yoludur. Temel amaç bant genişliğini azaltmak olsa da, doğru şekilde uygularsanız, bellek, CPU döngüleri ve disk G/Ç tüketimini azaltmanıza da yardımcı olur.
