COMPUTER ENGINEER

Örneklere git
Blog
HTTP / HTTPS / TLS6 dk çalışma
23/ 70

Mesajlar, temsiller ve dosyalar

Content negotiation: Accept, q ve 406/415

Temsil, dil, sıkıştırma ve tercih önceliğini ayrı düşün.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

Content negotiation aynı kaynağın farklı temsilleri arasından seçimdir. Accept medya türünü, Accept-Language dili, Accept-Encoding içerik kodlamasını belirtir. q değeri göreli tercihi gösterir; q=0 kabul edilmeyen seçenek anlamına gelir. Sunucu hangi boyutlarda gerçekten seçim yaptığını bilmeli; desteklemiyorsa sırf header geldi diye varmış gibi davranmamalıdır.

Content-Type gönderilen gövdenin türüdür. İstemci application/json istiyor fakat sunucu uygun temsil sunamıyorsa 406 düşünülebilir; istemci desteklenmeyen XML body gönderdiyse 415 ayrı konudur. Content-Encoding: gzip ile Content-Type: application/json birlikte bulunabilir: biri sıkıştırma, diğeri açılmış temsil türüdür. Charset medya türü sözleşmesine göre kullanılır.

Vary yanıt seçimini etkileyen request alanlarını cache’e bildirir. Dil bazlı seçim yapıp Vary veya eşdeğer güvenli cache key modelini unutursan yanlış dil başka ziyaretçiye gidebilir. Kontrolsüz çok header üzerinden vary yapmak cache verimini azaltır. API’de açık path/query dil seçimi ile negotiation yaklaşımını karşılaştır. Browser header’ları kullanıcının kesin kimliği veya konuştuğu dilin kanıtı değildir.

NERESİNDE KULLANIRSIN?

Çok dilli temsil ve cache davranışı tasarlarken.

SIK YAPILAN HATA

Accept’i request body türü sanmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

HTTP / temsili örnek
Accept: application/json

Yanıt için JSON tercihi.

Bu sayfa dış sunuculara istek göndermez. HTTP mesajları temsili, HTTP/1.1 biçiminde okunabilir gösterimlerdir; HTTP/2 ve HTTP/3 wire formatı değildir. example.test ayrılmış öğretim alan adıdır. Komut ve JavaScript örneklerini yalnız kendi test ortamında uygula; gerçek token veya cookie yayımlama.

02 / SIRA SENDE

Önce kendin dene.

JSON isteyen istemci XML gönderdi. Hangi alan neyi anlatıyor?

Çözümü ve açıklamasını göster
Açıklamalı çözüm
Accept: application/json
Content-Type: application/xml

Accept yanıtı, Content-Type gönderilen body’yi tanımlar.