Hacker DirectoryHacker Directory
Öğrenmeye devam et
ENHTML kaydet ↓

WEB / WEB-07.02

Methods, semantics ve status codes

Method niyeti, status server’ın o request için bildirdiği sonucu taşır. Safe, idempotent, authorized ve completed kavramlarını aynı etiket sanmadan izle.

CORE · RED · BLUE · ARTIFACT · PRACTICE

1. Core · Mekanizma

Hareket olmadan bütün senaryoları oku

Idempotent PUT tekrarı

  1. Desired state

    Duru mevcut note label’ını Pinned yapmak ister; permission’ın true olduğu bu örnekte verilmiştir.

    Browser / Duru
    PUT: label=Pinned hazır; response bekleniyor
    Atlas Application
    Request yok
    Resource / yerel state
    Label: Draft
  2. İlk PUT ulaştı

    Aynı target’a replacement request alındı; henüz commit yok.

    Browser / Duru
    PUT: label=Pinned hazır; response bekleniyor
    Atlas Application
    PUT alındı; policy kontrolü
    Resource / yerel state
    Label: Draft
  3. İlk replacement

    Allowed action mevcut state’i Pinned ile değiştirir.

    Browser / Duru
    Response bekleniyor
    Atlas Application
    Fulfilled; 204 hazır
    Resource / yerel state
    Label: Pinned
  4. 204 ulaştı

    Content ve Content-Length olmadan success; JSON parse yok.

    Browser / Duru
    204 alındı; content yok
    Atlas Application
    Fulfilled; 204 hazır
    Resource / yerel state
    Label: Pinned
  5. Aynı request’i seç

    Öğretim örneği aynı target ve content’i tekrar seçer; loss/retry ölçümü değildir.

    Browser / Duru
    Aynı PUT hazır; response bekleniyor
    Atlas Application
    Fulfilled; 204 hazır
    Resource / yerel state
    Label: Pinned
  6. Tekrar PUT ulaştı

    Yeni request aynı intended replacement’i taşır.

    Browser / Duru
    Aynı PUT hazır; response bekleniyor
    Atlas Application
    Tekrar PUT alındı
    Resource / yerel state
    Label: Pinned
  7. State aynı kalır

    İkinci fulfilled replacement sonrası Pinned; audit sayısı idempotence ölçütü değildir.

    Browser / Duru
    Response bekleniyor
    Atlas Application
    Tekrar fulfilled; 204 hazır
    Resource / yerel state
    Label: Pinned
  8. İkinci 204 ulaştı

    Bu fixture aynı 204 seçer; standardın zorunlu response-equality kuralı değildir.

    Browser / Duru
    204 alındı; intended state aynı
    Atlas Application
    Tekrar fulfilled; 204 hazır
    Resource / yerel state
    Label: Pinned

HEAD metadata, sıfır content

  1. HEAD intent’i

    Representation metadata istenir, GET content transfer’i istenmez.

    Browser / Duru
    HEAD hazır; response bekleniyor
    Atlas Application
    Request yok
    Resource / yerel state
    Atlas note: GET 10 byte
  2. HEAD ulaştı

    Server request method’ünü body kuralları için korur.

    Browser / Duru
    HEAD hazır; response bekleniyor
    Atlas Application
    HEAD alındı
    Resource / yerel state
    Atlas note: GET 10 byte
  3. Metadata hazır

    200 ile Content-Length: 10, GET olsaydı dönecek content’i anlatır. HEAD response’unda content boyutu sıfırdır.

    Browser / Duru
    Response bekleniyor
    Atlas Application
    200; CL=10; content=0
    Resource / yerel state
    Atlas note: GET 10 byte
  4. HEAD response ulaştı

    Browser request bağlamıyla body’nin yokluğunu anlar.

    Browser / Duru
    200; metadata 10; content 0
    Atlas Application
    200; CL=10; content=0
    Resource / yerel state
    Atlas note: GET 10 byte
  5. Metadata’yı kullan

    Representation bytes’i alınmadı; bu response JSON document değildir.

    Browser / Duru
    Metadata biliniyor; body alınmadı
    Atlas Application
    200; CL=10; content=0
    Resource / yerel state
    Atlas note: GET 10 byte

Concealed 404

  1. GET intent’i

    Public view notu ister; internal existence Browser’a verilmez.

    Browser / Duru
    GET hazır; existence unknown; response bekleniyor
    Atlas Application
    Request yok
    Resource / yerel state
    Exists=true; disclosure=false
  2. GET ulaştı

    Application target’ı aldı; response kararını henüz vermedi.

    Browser / Duru
    GET hazır; existence unknown; response bekleniyor
    Atlas Application
    GET alındı
    Resource / yerel state
    Exists=true; disclosure=false
  3. Disclosure policy

    Fixture policy varlığı gizler; missing branch ile aynı public body seçilir.

    Browser / Duru
    Response bekleniyor
    Atlas Application
    404 hazır: Not found
    Resource / yerel state
    Exists=true; disclosure=false
  4. 404 ulaştı

    Fetch outcome fixture Response ile resolve olur; ok=false.

    Browser / Duru
    404; ok=false; existence unknown
    Atlas Application
    404 hazır: Not found
    Resource / yerel state
    Exists=true; disclosure=false
  5. Kanıt sınırını koru

    Browser yalnız public sonucu bilir; gerçek yokluk veya kalıcılık çıkarımı yapamaz.

    Browser / Duru
    Public result biliniyor; existence unknown
    Atlas Application
    404 hazır: Not found
    Resource / yerel state
    Exists=true; disclosure=false

ROLLER · STATE · VERİ AKIŞI

Method resource’a yöneltilen bir niyettir

GET mevcut representation’ı istemek, HEAD aynı retrieval’ın content taşımayan metadata görünümünü istemektir. POST target’ın kendi semantics’ine göre content’i işlemesini ister. PUT bilinen target state’ini gönderilen representation ile create/replace etmeyi ister. DELETE target ile mevcut functionality ilişkisinin kaldırılmasını ister; bütün backup bytes’ının fiziksel silindiği garantisi değildir.

PATCH bir replacement representation yerine resource’a uygulanacak değişiklik instructions’ı taşır; patch document’in media format’ı ve endpoint contract’ı belirleyicidir. PATCH genel olarak safe veya idempotent sayılmaz, ancak belirli bir operation idempotent tasarlanabilir. HTTP method adı, otomatik retry garantisi için tek başına yeterli değildir.

OPTIONS communication seçeneklerini anlatır. CONNECT tunnel kurar; TRACE message loop-back içindir. Bir HTTP method’ünün standartta bulunması Browser Fetch üzerinden kullanılabileceğini göstermez: Fetch CONNECT ve TRACE gibi forbidden methods’ı kısıtlar. GET/HEAD request’ine non-null body verilmesi de Fetch Request constructor’da TypeError oluşturur; protocol’daki genel framing olasılığı ile Browser API sözleşmesi ayrı konudur.

Atlas’ın /notes/atlas-1 resource’u GET, HEAD ve PUT destekler. Bu örnekte permissionAllows=true başlangıç koşuludur. Target’ın desteklediği method’lar ile kullanıcının izinleri aynı set değildir. Bilinen bir method target’ta desteklenmiyorsa 405 ve Allow önemlidir; server’ın method’ü tanımaması veya implement etmemesi ise 501 bağlamıdır.

Safe ve idempotent farklı sorulara cevap verir

Safe, method’ün tanımlanmış niyetinin read-only olmasıdır. GET, HEAD, OPTIONS ve TRACE safe’tir. Server yine access log yazabilir; incidental side effect safe tanımını tek başına bozmaz. Ancak resource sahibi safe method ile business state değişikliği isteyen action’ı çalıştırmamalıdır: automated retrieval ve prefetch de bu method’leri kullanır.

Idempotent, aynı request tekrarlandığında intended server effect’in tek request ile aynı olmasıdır. PUT ve DELETE, safe method’lerle birlikte idempotent’tir; POST genel olarak böyle garanti vermez. Birinci PUT 204, sonraki PUT başka uygun status dönebilir; response byte’larının eşit olması gerekmez. Audit entries veya revision history tekrar başına artabilir.

Fixture aynı target’a label=Pinned state’ini iki kez PUT eder. Resource iki completion sonunda da Pinned’dir; repetition resource’u üçüncü bir state’e taşımaz. Diğer kullanıcıların eşzamanlı değişiklik yapmadığı burada açık varsayımdır. Gerçek update’lerde conditional requests ve concurrency policy ayrıca gerekir. Idempotence permission kontrolünü kaldırmaz; safe de confidential data’nın herkese açılabileceği anlamına gelmez.

Status sınıfları: sonuç var, bütün gerçekler yok

1xx interim information, 2xx successful processing, 3xx redirection veya related additional action, 4xx perceived client error, 5xx server error sınıflarıdır. Numeric status method ve headers ile okunur. 201 creation bildirir; 202 accepted processing’in tamamlandığını vaat etmez. 204 fulfilled request’i ek content olmadan bildirir.

401 geçerli authentication credentials eksikliğini bildirir ve applicable WWW-Authenticate challenge gerektirir. 403 request anlaşılmış olsa da fulfillment reddedildiğini gösterir; sebep yalnız credential olmayabilir. 404 mevcut representation bulunmadığını veya varlığın açıklanmak istenmediğini gösterebilir. Ayrıca temporary/permanent ayrımını tek başına vermez. Internal exists=true ve exists=false fixture’ları aynı 404 body’si verir; response bu farkı açmaz.

405 target method support’u, 409 mevcut resource state ile conflict’i, 415 kabul edilmeyen request format’ını açıklayabilir. 422 anlaşılan content type ve doğru syntax içindeki işlenemeyen instructions için kullanılır. Bu status’ların application mapping’i belgelenmelidir; error response görmek tek başına saldırı veya server defect kanıtı değildir.

Body kuralları ve Browser sonucu

HEAD response’u content taşıyamaz. Örnekte Content-Length: 10 gönderilir: GET olsaydı aynı representation’ın 10 byte olacağını söyler; HEAD’de beklenen body 0 byte’tır. Böyle bir field HEAD için kullanılacaksa would-be GET content uzunluğuyla eşleşmelidir. 204 ise content/trailers içeremez ve server Content-Length gönderemez; Content-Length: 0 ekleyerek body kuralını açıklamak doğru değildir.

Fetch HTTP error status için normalde reject olmaz: 404 response ulaşırsa Promise bir Response ile resolve olur. Response.ok yalnız 200–299 status aralığını ifade eder; 202’de business job hâlâ pending olabilir. Network error/abort gibi durumlar ayrı failure yoludur. Response body’sini JSON parse etmek de status’tan ayrı işlemdir; HEAD/204 için olmayan content’i parse etmeye çalışma.

İdempotent request için response gelmeden connection failure olduğunda repeat semantics yararlıdır; ilk işlem uygulanmış olabilir. Non-idempotent bir action’ı yalnız “yanıt alamadım” diye otomatik tekrar etmek genel garantiye dayanmaz. İlgili action’ın özel idempotency veya status-reconciliation sözleşmesi varsa o sözleşme ayrıca değerlendirilir.

2. Red · Güven ve etki

Hareket olmadan bütün senaryoları oku

Safe / rights

  1. Method özelliği permission değildir

    GET safe/idempotent olsa da confidential note’nin okunması resource permission ister. Artifact permissionAllows=true sadece verilmiş predicate’tir; safe etiketi user entitlement üretmez.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    Business gate yok
    Business outcome
    Outcome yok
  2. Status completion’a yükseltilmedi

    Safe intent requested state mutation değildir. Log veya incidental processing olabilir; permission kontrolünü yalnız write methods’a koymak protected read gate’ini boş bırakır.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    Read entitlement required
    Business outcome
    Outcome yok
  3. Retry için operation contract gerekli

    PUT desiredState label=Pinned iki attempt’te aynı intended state effect’i verir. Genel POST veya PATCH’e aynı property aktarılmaz; application operation daha dar idempotent tasarlanabilir.

    Method/status evidence
    GET safe / permission separate
    Intent/completion gate
    Read entitlement required
    Business outcome
    PUT desired state / POST guarantee absent
  4. 404 public eşitliği korur

    privacy404 örneği, internalExists true ve false olduğunda aynı 404 ve Not found sonucunu verir. Bu public status’tan resource’un varlığını çıkarmak, concealed resource policy’sini yanlış yorumlamak olur.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    Read entitlement required
    Business outcome
    PUT desired state / POST guarantee absent
  5. Body kuralları completion’dan ayrı

    HEAD 200 wouldBeGetOctets=10 taşıyabilir ama actualContentOctets=0’dır. PUT 204 responseContent=null’dur; 204 empty JSON object gibi parse edilecek content üretmez.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    HEAD no content / 204 no content
    Business outcome
    PUT desired state / POST guarantee absent
  6. Failure ve intent sınıfları korundu

    Network-error rejected Promise server effect’i unknown bırakır. Method/status/operation contract ayrı açıklanır; malformed request, external retry veya live mutation bu sınıflandırmadan üretilmez.

    Method/status evidence
    404 / existence unknown
    Intent/completion gate
    HEAD no content / 204 no content
    Business outcome
    Method semantics / business unknown

202 completion

  1. 202 HTTP sonucu seçildi

    fetchOutcomes[0] bir 202 Response ile resolve olur ve ok=true’dur. Bu status request’in processing için kabul edildiğini anlatır; businessCompleted=false aynı row’da ayrı alandır. HTTP başarı aralığı ile job completion farklı sorulardır.

    Method/status evidence
    202; resolved-response; ok true
    Intent/completion gate
    Completion henüz değerlendirilmedi
    Business outcome
    BusinessCompleted false
  2. Accepted sonucu completed yapılmaz

    BusinessCompleted=false olan bu örnekte UI “iş tamamlandı” sonucunu gösteremez. Response.ok yalnız 200–299 aralığını test eder. Bir işin completion sonucunu öğrenmek için o operation’ın contract’ına bağlı application state gerekir.

    Method/status evidence
    202; resolved-response; ok true
    Intent/completion gate
    Accepted; completion yok
    Business outcome
    BusinessCompleted false
  3. Action effect’i kendi contract’ına bağlıdır

    Ayrı PUT karşılaştırması Draft→Pinned ve Pinned→Pinned intended effect’ini gösterir. Bu method özelliği, 202 veren başka bir action’ın tamamlandığını veya genel POST/PATCH’in tekrar garantisini oluşturmaz. Bu row’lar aynı işlem gibi birleştirilmez.

    Method/status evidence
    Ayrı karşılaştırma: PUT replacement
    Intent/completion gate
    202 hâlâ accepted; completion yok
    Business outcome
    BusinessCompleted false
  4. HTTP404 ile network rejection ayrıdır

    fetchOutcomes[1] 404 Response ile resolve olur ve ok=false’dur. fetchOutcomes[2] ise response status bilinmeden network-error rejection verir; server effect bilinmez. Bu iki negative outcome, 202’nin application state’ini değiştiren yeni olaylar değildir.

    Method/status evidence
    404 Response / network rejection ayrı
    Intent/completion gate
    202 accepted; ayrı outcome row’ları
    Business outcome
    202 business false; network effect unknown
  5. Yeni retry kararı genel varsayımdan çıkmaz

    Response alınmayan bir işlem uygulanmış olabilir. Tekrar kararı method’ün intended effect’i ve operation contract’ıyla değerlendirilir; 202 veya rejected Promise tek başına “hiç çalışmadı” demek değildir. Burada yeni request veya action yürütülmez.

    Method/status evidence
    202/404/network row’ları ayrı tutulur
    Intent/completion gate
    Completion ve retry contract gerektirir
    Business outcome
    202 business false; network effect unknown
  6. Application üreticisi completion’ı açıklar

    HTTP endpoint ve Fetch outcome status/Promise sonucunu verir. Job veya resource state’ini yöneten application üreticisi completion sonucunu verir; aynı operation’la eşleşen bu kanıt eksikse tamamlanma bilinmez. Verilmiş 202 row’unda businessCompleted=false korunur.

    Method/status evidence
    HTTP status ve Promise ayrı sınıflanır
    Intent/completion gate
    Üretici application state; coverage gerekir
    Business outcome
    202 accepted; business tamamlanmadı

VARSAYIM · SINIR · KONTROL

Read-only etiketi erişim izni değildir

Confidential bir note GET ile okunur. Safe olmasının anlamı client’ın state mutation istememesidir; note’nin sensitive olup olmadığını veya Duru’ya ait olup olmadığını açıklamaz. Yetki kontrolünü yalnız write methods’a koyan tasarım protected read boundary’sini eksik bırakır.

Blocking control her resource/action için trusted permission kararını almak ve safe route’larda requested mutation çalıştırmamaktır. Fixture’ın supplied permissionAllows=true değeri gerçek identity verification veya authorization engine kanıtı değildir. Bu ders harmless note metadata’sı kullanır.

Retry ve status yanlış kabul kapısına dönüşmesin

Normal PUT replacement aynı desired state’e gider. Yanlış varsayım bütün POST’ların aynı garantiyi verdiğini veya 202’nin işi bitirdiğini sanmaktır. Etki duplicate business action ya da henüz tamamlanmayan işi tamamlandı diye göstermek olabilir; scope application semantics’ine bağlıdır.

Client kontrolü method’e, operation contract’a ve completion evidence’a dayanır. Server generic 404 kullanıyorsa client resource absence’ı iddia etmez. Savunma incelemesi internal decision reason ile public result’ı ayırır; gizlenen existence public body’ye yazılarak privacy policy bozulmamalıdır.

3. Blue · Güvenli geliştirme ve savunma

Hareket olmadan bütün senaryoları oku

PUT state effect

  1. Method context önce seçildi

    Fixture, /notes/atlas-1 için permission’ı verilmiş ve concurrent writer olmadığını kabul eder. GET, HEAD ve PUT yine farklı method/content sözleşmeleriyle okunur. Bu varsayımlar gerçek authorization veya concurrency testi değildir.

    Operation evidence
    Method + resource context
    Effect/content review
    Effect/bytes review yok
    Status-contract review
    Verdict yok
  2. State effect veya metadata hesaplandı

    İlk PUT denemesi Draft state’ini Pinned yapar; ikinci deneme Pinned state’ini korur. İdempotence, response metinlerinin eşitliğinden değil, işlemin amaçlanan state etkisinden değerlendirilir.

    Operation evidence
    Method + resource context
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    Verdict yok
  3. 204 content yokluğu kaydedildi

    Her PUT denemesi 204 döndürür; responseContent ve responseContentLengthField null kalır. No-content status için JSON body teslim edilmiş gibi observation eklenmez.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    Verdict yok
  4. İkinci replacement ilk sonucu korur

    İki attempt aynı resource ve label=Pinned representation’ına bağlıdır; concurrentWriters=false verilmiştir. İkinci intended effect yine Pinned’dir. Audit sayısı veya status metni bu state comparison’ın yerine geçirilmez.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    Verdict yok
  5. State sonucu application’dan gelir

    Gerçek incelemede resource state’ini değiştiren application katmanı before/after sonucunun üreticisidir. Client’ın 204 receipt’i fulfillment bildirir, fakat state history veya persistence durability’yi tek başına ölçmez. Aynı target ve representation’la eşleşen state kanıtı gerekir.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    Üretici application state; persistence kapsam dışı
  6. Semantic regression intended scope’ta

    Tekrarlanan PUT aynı Pinned etkisini korur ve iki 204 response da content taşımaz. Bu iki deneme, concurrent writer davranışını veya bütün business persistence sürecini doğrulamaz.

    Operation evidence
    204 / content null
    Effect/content review
    Draft→Pinned / Pinned→Pinned
    Status-contract review
    PUT effect consistent / concurrent scope omitted

HEAD metadata

  1. HEAD aynı resource için seçildi

    HEAD /notes/atlas-1, GET’in content’ini taşımadan representation metadata’sını ister. Örnekte wouldBeGetBody=Atlas note ve wouldBeGetOctets=10’dur; permission verilmiş koşuldur, gerçek account kararı değildir.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    Metadata ve actual bytes ayrı
    Status-contract review
    Coverage henüz incelenmedi
  2. State effect veya metadata hesaplandı

    HEAD için status 200, contentLengthField 10 ve actualContentOctets 0 olur. Metadata, karşılık gelen GET representation’ını anlatabilir; 10 byte content teslim edildiği anlamına gelmez.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    HEAD metadata10 / actual0
    Status-contract review
    Verdict yok
  3. HEAD metadata byte receipt değildir

    contentLengthField=10 would-be GET uzunluğunu anlatır; actualContentOctets=0 ise HEAD’de content taşınmadığını belirtir. HEAD 200 ile PUT 204 ayrı method/status bağlamlarıdır; 204’ün null content field’ı HEAD row’una kopyalanmaz.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    HEAD 200; CL 10; actual content 0
    Status-contract review
    HEAD body yok; metadata var
  4. Negative fixture coverage’dan ayrıldı

    HEAD actualContentOctets>0 predicate’i verilmiş inconsistent row’u işaretler. Eksik row nedeniyle zero match gerçek body kuralının geçerli ölçüldüğünü söylemez.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    HEAD predicate / coverage separate
    Status-contract review
    HEAD body yok; metadata var
  5. Method context ve capture scope gerekir

    Gerçekte server HTTP üreticisi method/status ve would-be GET metadata’sını, client veya kapsamı bilinen capture actual body receipt’ini açıklar. HEAD context’i kaybolursa Content-Length yanlışlıkla teslim edilmiş byte sayısı sanılabilir. Zero selector match eksik kayıt coverage’ını tamamlamaz.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    HEAD metadata / capture completeness ayrı
    Status-contract review
    Üretici server + client/capture; coverage gerekir
  6. Semantic regression intended scope’ta

    HEAD metadata/body ayrımı verilmiş case’te tutarlıdır. Full capture completeness ve gerçek client/server instrumentation ayrıca gerekir.

    Operation evidence
    HEAD /notes/atlas-1; GET 10 byte
    Effect/content review
    HEAD metadata / capture completeness ayrı
    Status-contract review
    HEAD metadata consistent / capture unproven

UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA

Method, status ve gerçek state değişimini eşle

İdempotence kontrolünde response metninin eşitliğini değil intended state effect’i karşılaştır. Artifact two PUT completions için before/after label tutar. HEAD observation’da wouldBeGetOctets=10 ile actualContentOctets=0 ayrı alanlardır. Bunlar öğretim karar kayıtlarıdır, access log standardı değildir.

XPath, method=HEAD observation’ında actualContentOctets>0 olan tutarsız fixture’ı seçer. Negative 0, positive 1 beklenir; eksik observation 0 döndürse bile body kuralının doğrulandığı söylenemez. Gerçek traffic için capture completeness ve instrumented server/client context gerekir.

Status catalog’u ürün sözleşmesiyle tamamla

Manual exercise’de PUT tekrarının label sonucunu, HEAD metadata’sını ve 404 public equivalence’ını karşılaştır. 202’yi “tamamlandı”, 404’ü “kesin yok”, 204’ü “JSON boş object” diye çevirme. İşlem sonucu ve user-facing mesaj uygulamanın belgeli contract’ına bağlansın.

405 için Allow alanını target support kanıtı olarak oku; kullanıcı permission listesi sanma. 401 challenge, 403 refusal ve concealed 404 farklı operational kararları temsil edebilir. Gözlenen status distribution tanı koymak için tek başına yeterli değildir; normal client validation ve transient service failures da aynı sınıfları üretir.

ŞİMDİ VAKAYA UYGULA

Method property ile business completion hangi farklı kanıtları ister?

Atlas note okunurken permission gerekir; safe GET etiketi bunu sağlamaz. Tekrarlanan PUT, Pinned state’ini korur. 202 işin tamamlandığını söylemez; HEAD metadata’sı da teslim edilmiş content değildir.

Vakadaki 200, media type ve parse error kayıtlarını ayrı değerlendir. Bu dersteki representation kurallarıyla usable data için henüz hangi koşulun gerektiğini açıkla.

Bağlı vaka dosyasını aç ↗

ÖRNEĞİ BİRLİKTE OKUYALIM

Method karar defteri: PUT, HEAD ve concealed 404

Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.

Ham kaydı ve alan açıklamalarını oku
{
  "resource": "/notes/atlas-1",
  "permissionAllows": true,
  "concurrentWriters": false,
  "methods": [
    {
      "method": "GET",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "HEAD",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "POST",
      "safe": false,
      "idempotent": false
    },
    {
      "method": "PUT",
      "safe": false,
      "idempotent": true
    },
    {
      "method": "DELETE",
      "safe": false,
      "idempotent": true
    },
    {
      "method": "PATCH",
      "safe": false,
      "idempotent": false,
      "scope": "General method property; particular PATCH operations can be designed to be idempotent."
    },
    {
      "method": "OPTIONS",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "TRACE",
      "safe": true,
      "idempotent": true
    },
    {
      "method": "CONNECT",
      "safe": false,
      "idempotent": false
    }
  ],
  "put": {
    "desiredState": {
      "label": "Pinned"
    },
    "attempts": [
      {
        "before": "Draft",
        "after": "Pinned",
        "status": 204,
        "responseContent": null,
        "responseContentLengthField": null
      },
      {
        "before": "Pinned",
        "after": "Pinned",
        "status": 204,
        "responseContent": null,
        "responseContentLengthField": null
      }
    ]
  },
  "head": {
    "method": "HEAD",
    "status": 200,
    "contentType": "text/plain; charset=utf-8",
    "contentLengthField": 10,
    "wouldBeGetBody": "Atlas note",
    "wouldBeGetOctets": 10,
    "actualContentOctets": 0
  },
  "privacy404": [
    {
      "internalExists": true,
      "internalDisclosureAllowed": false,
      "status": 404,
      "publicBody": "Not found"
    },
    {
      "internalExists": false,
      "internalDisclosureAllowed": false,
      "status": 404,
      "publicBody": "Not found"
    }
  ],
  "fetchOutcomes": [
    {
      "status": 202,
      "promiseOutcome": "resolved-response",
      "ok": true,
      "businessCompleted": false
    },
    {
      "status": 404,
      "promiseOutcome": "resolved-response",
      "ok": false,
      "existenceConclusion": "unknown"
    },
    {
      "status": null,
      "promiseOutcome": "rejected-network-error",
      "ok": null,
      "serverEffectConclusion": "unknown"
    }
  ],
  "selector": {
    "language": "XPath",
    "xml": "<observations><response method=\"HEAD\" actualContentOctets=\"0\"/></observations>",
    "xpath": "count(/observations/response[@method=\"HEAD\" and number(@actualContentOctets)>0])",
    "expected": 0,
    "positiveFixtureXml": "<observations><response method=\"HEAD\" actualContentOctets=\"1\"/></observations>",
    "positiveExpected": 1,
    "scope": "Only authored protocol-decision observations, not product log field names or a live HTTP capture.",
    "missingFieldBehavior": "Missing observation is insufficient evidence; zero matches is not proof of correct runtime behavior."
  }
}
methods.safe / idempotent
Standart method intent’i; permission, encryption veya bütün API implementasyonları hakkında garanti değil.
put.attempts
İki replacement sonrası intended state; eşzamanlı writer yok.
head.contentLengthField
HEAD’de gelen content boyutu değil, would-be GET metadata’sı.
privacy404
Farklı internal state’in aynı public status/body’ye eşlenmesi.
fetchOutcomes
HTTP outcome, Promise outcome ve business completion ayrı gözlem.

Bütün izinler supplied; replacement in-process. Fetch sonuçları source-grounded fixture’dır, Browser/network çalıştırması değildir. Generic body eşitliği timing veya tam privacy guarantee ölçmez.

İki yanlış kanı

Idempotent request her tekrarda aynı response’u üretir.

Aynı intended server effect gerekir; status veya audit/revision side effects farklı olabilir. Permission yine kontrol edilir.

404 kesin yok demektir; Fetch de error olduğu için reject olur.

404 varlığın gizlenmesini de gösterebilir ve genelde Response ile resolve olur. Response.ok false’tur; network error ayrı yoldur.

SIRA SENDE

Bu hikâyeyi sen çöz.

Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.

Aynı PUT iki kez Pinned state’ini kuruyor; ikisi de 204 döndürüyor. Idempotent olmak response byte’larının aynı olması mı?

  1. Hayır. Tekrarın amaçlanan server effect’i aynıdır.
  2. Evet. Idempotent method bütün response alanlarını sabitler.
Gerekçeli cevabı oku

Hayır. Tekrarın amaçlanan server effect’i aynıdır. — Örnek Draft→Pinned ve Pinned→Pinned geçişlerini gösterir. Idempotence response eşitliği garantisi değildir.

HEAD için Content-Length=10, fakat actualContentOctets=0. Çelişki var mı?

Dersten seçilen artifact alanları; öğretim örneği

head
{"method":"HEAD","status":200,"contentType":"text/plain; charset=utf-8","contentLengthField":10,"wouldBeGetBody":"Atlas note","wouldBeGetOctets":10,"actualContentOctets":0}
  1. Evet. HEAD body mutlaka 10 octet taşımalıdır.
  2. Hayır. HEAD content taşımaz; uzunluk GET metadata’sıdır.
Gerekçeli cevabı oku

Hayır. HEAD content taşımaz; uzunluk GET metadata’sıdır. — wouldBeGetOctets=10 metadata’dır. actualContentOctets=0, HEAD semantics ile uyumludur.

202 ve public 404, business completion ve internal existence hakkında ne söyler?

Gerekçeli cevabı oku

202 request’in kabul edildiğini gösterebilir, fakat businessCompleted=false kalabilir. Bu örnekte public 404 hem bulunmayan hem varlığı paylaşılmayan resource için kullanılır; içerideki varlık durumu bilinmez. İki status da alınmış HTTP Response’tur. 404 tek başına fetch rejection değildir.

□ 202’yi business completion saymadım.

□ 404’ten kesin internal yokluk sonucu çıkarmadım.

Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç

Kaynaklar ve kapsam

  • RFC 9110 — HTTP Semantics9.1 Overview · 9.2.1 Safe Methods · 9.2.2 Idempotent Methods · 9.3.2 HEAD · 9.3.3 POST · 9.3.4 PUT · 9.3.5 DELETE · 8.6 Content-Length · 15 Status Codes · 15.3.3 202 Accepted · 15.3.5 204 No Content · 15.5.2 401 Unauthorized · 15.5.4 403 Forbidden · 15.5.5 404 Not Found · 15.5.6 405 Method Not Allowed · 15.5.16 415 Unsupported Media Type · 15.5.21 422 Unprocessable Content
  • RFC 9112 — HTTP/1.16.3 Message Body Length
  • WHATWG — Fetch Standard (official source)Methods: safe and CORS-safelisted methods · Request constructor: GET/HEAD non-null body throws TypeError · Response.ok getter: ok status · Fetch methods: processResponse network error rejects promise
  • MDN — Window: fetch() methodWindow: fetch() method · Return value
  • RFC 5789 — PATCH Method for HTTP2 The PATCH Method