HTTP üstbilgileri büyük / küçük harfe duyarlı mı?


714

Bir blog gönderisinde bir yanıtın içerik türünü ayarlamak için aşağıdaki PHP'yi kullanın:

header('content-type: application/json; charset=utf-8');

O yazıya content-typebunun büyük harfle yazılması gerektiğini söyleyen bir yorum aldım Content-type. Bu doğru mu? Benim için tüm küçük harflerle çalışıyor gibi görünüyor ve HTTP başlıklarının büyük / küçük harfe duyarlı olmadığını varsaydım. Yoksa tarayıcılar iyi olduğu için mi işe yarıyor?


26
Büyük / küçük harfe duyarlı değildir, ancak davayı düzeltirseniz, 'İçerik Türü' olmalıdır.
mc0e

10
FWIW, application / json ile "charset" göndermek anlamsızdır. Böyle bir parametre yok.
Julian Reschke

5
@JulianReschke - Bu yanlıştır, karakter kümesi İçerik Türü üstbilgisinde geçerli bir parametredir. Bkz. W3.org/International/articles/http-charset/index ve geliştirici.mozilla.org/en
US/docs/Web/HTTP/Headers/Content

8
@NullUserException - olumsuz (boşa giden bayt dışında) insanları karakter kümesi hakkında karıştırmaya devam etmektir. Bunun yerine bu bileşenleri sabitleyin.
Julian Reschke

10
@JulianReschke doğru. IANA uygulama / json atama charset bu medya türü için anlamsız olduğunu söyledi. hiçbir şey yapmaz. Lütfen eklemeyin, çünkü gereksiz karışıklığa neden olan gürültü.
Monica 2331977

Yanıtlar:


936

Üstbilgi adları büyük / küçük harfe duyarlı değildir.

Gönderen RFC 2616 - "Köprü Metni Aktarım Protokolü - HTTP / 1.1" , Bölüm 4.2, "İleti Başlıkları" :

Her başlık alanı bir adın ardından iki nokta üst üste (":") ve alan değerinden oluşur. Alan adları, vaka vardır içinde hassas.

Güncelleme RFC 7230 , bu bölümde RFC 2616'dan herhangi bir değişiklik listelemez .


96
Yanıt hala doğrudur, RFC 7230 şunu belirtir: "Her başlık alanı, büyük / küçük harfe duyarlı olmayan bir alan adından sonra iki nokta üst üste (": "), isteğe bağlı önde gelen boşluk, alan değeri ve isteğe bağlı sondaki boşluktan oluşur."
Martin Müller

6
'Apache_request_headers ()' yöntemini kullanarak bir başlık alanının değerini almak için PHP kullanılırken üstbilgi alanları büyük / küçük harfe duyarlıdır.
Zarar

7
Herkes bu konuda spesifikasyona uymayan popüler tarayıcı örnekleri sağlayabilir mi?
David W

7
@Harm Bunun nedeni, PHP'deki dize karşılaştırmasının büyük / küçük harfe duyarlı olmasıdır.
MrWhite

7
JZ

238

RFC 2616'ya göre HTTP üstbilgi adları büyük / küçük harfe duyarlı değildir :

4.2:

Her başlık alanı bir adın ardından iki nokta üst üste (":") ve alan değerinden oluşur. Alan adları büyük / küçük harfe duyarlı değildir.

(Alan değerleri büyük / küçük harfe duyarlı olabilir veya olmayabilir.)

Büyük tarayıcıların buna uyması gerektiğine inanıyorsanız, hazırsınız demektir.


BTW, HTTP'nin çoğundan farklı olarak, yöntemler (fiiller) büyük / küçük harfe duyarlıdır:

5.1.1 Yöntem

Yöntem belirteci
, İstek URI'sı tarafından tanımlanan kaynak üzerinde gerçekleştirilecek yöntemi belirtir . Yöntem büyük / küçük harfe duyarlıdır.

   Method         = "OPTIONS"                ; Section 9.2
                  | "GET"                    ; Section 9.3
                  | "HEAD"                   ; Section 9.4
                  | "POST"                   ; Section 9.5
                  | "PUT"                    ; Section 9.6
                  | "DELETE"                 ; Section 9.7
                  | "TRACE"                  ; Section 9.8
                  | "CONNECT"                ; Section 9.9
                  | extension-method
   extension-method = token

Başka bir yorum, bu cevabın geçersiz olduğunu söyledi. Bu doğru mu? Eğer öyleyse, insanların kafasını karıştırmamak için güncelleyebilirsiniz.
Speedplane

36

TLDR; hem HTTP / 1.1 hem de HTTP / 2 üstbilgileri büyük / küçük harfe duyarlı değildir.

RFC 7230'a göre (HTTP / 1.1):

Her başlık alanı, büyük / küçük harfe duyarlı olmayan bir alan adı ve ardından iki nokta üst üste (":"), isteğe bağlı önde gelen beyaz alan, alan değeri ve isteğe bağlı sondaki beyaz alandan oluşur.

https://tools.ietf.org/html/rfc7230#section-3.2

Ayrıca, RFC 7540 (HTTP / 2):

HTTP / 1.x'de olduğu gibi, başlık alanı adları, büyük /
küçük harfe duyarlı olmayan bir şekilde karşılaştırılan ASCII karakterlerinin dizeleridir .

https://tools.ietf.org/html/rfc7540#section-8.1.2


19
sadece açıklığa kavuşturmak: alan adları büyük / küçük harfe duyarlı değildir; alan değerleri , alan adına bağlı olarak büyük / küçük harfe duyarlı olabilir.
Julian Reschke

7
HTTP / 2 RFC'den devam eden alıntı: "Ancak, başlık alanı adları HTTP / 2 kodlamasından önce küçük harfe dönüştürülmelidir ZORUNLU. Büyük harf başlık alanı adlarını içeren bir istek veya yanıt hatalı biçimlendirilmiş olarak ele alınmalıdır (Bölüm 8.1.2.6)"
Borek Bernard

2
Ben sadece "küçük harfe dönüştürülmelidir ZORUNLU" kısmı da fark ettim. Neden? Uygulamada CamelCase kasası tercih ediliyor gibi görünüyor (geliştirici araçları, popüler kod kütüphaneleri), neden HTTP / 2 bu eğilime karşı çıkmaya çalışsın?
jimp

7
@jimp - standartlar tutarlılık ile ilgilidir - deve-kasası kullanmak belirsiz olabilir - özellikle kısaltmalar, başlatmalar ve kısaltmalar ile. Örneğin - "Ön Uç-Https" veya "Ön Uç-HTTPS" - "WWW-Kimlik Doğrulaması" veya "Www-Kimlik Doğrulaması" - tüm küçük harflerin belirtilmesi alanı standartlaştırarak belirsizliği ortadan kaldırır. Bu da başlıkların her yönden ele alınmasını kolaylaştırır.
Fraser

16

header('Content-type: image/png') görüntü akışında metin olarak gösterildiği gibi IE 5.5 hizmet veren PHP 5.5 ile çalışmadı

header('Content-Type: image/png') görüntüde göründüğü gibi çalıştı

Tek fark sermaye 'T'.


18
Daha sonra, uygulamada bir sorun var çünkü tüm başlık alanlarının büyük / küçük harfe duyarsız olarak okunması gerekiyor. Apache Yedek kulübesi de berbat durumda. Küçük alan adlarını sevmez.
tahvil

8

Büyük / küçük harfe duyarlı değildir. Aslında NodeJS web sunucusu , istek nesnesinde kullanılabilir hale getirmeden önce bunları açıkça küçük harfe dönüştürür .

Burada, istemcinin onları gerçekten nasıl gönderdiğine bakılmaksızın, tüm başlıkların yalnızca küçük harflerle temsil edildiğini belirtmek önemlidir. Bu, hangi amaçla olursa olsun üstbilgileri ayrıştırma görevini basitleştirir.


Bunun nedeni, düğüm / javascript büyük / küçük harfe duyarlıdır, bu nedenle işleri basitleştirmek için her şeyi küçük harfe normalleştirir, yani yürürlükteki HTTP üstbilgileri büyük / küçük harfe duyarsızdır.
Svish

4

HTTP için RFC (yukarıda belirtildiği gibi), başlıkların büyük / küçük harfe duyarlı olmadığını belirtir, ancak bazı tarayıcılarda (sana bakıyorum, IE) her bir kelimeyi büyük harfle yazmanın en iyi olma eğiliminde olduğunu göreceksiniz:

Location: http://stackoverflow.com

Content-Type: text/plain

vs

location: http://stackoverflow.com

content-type: text/plain

Bu "HTTP" standardı değil, tarayıcı geliştiricilerinden biri olarak düşünmemiz gereken sadece bir diğeri.


3
Bununla ilgili herhangi bir kanıt sunabilir misiniz?
Julian Reschke

3
Somut bir test senaryosu demek istedim; Test etmek için bir IE var.
Julian Reschke

11
Neden tam olarak en iyi olma eğilimindedir?
Svish

Ben sadece devs ile vida için rastgele büyük harflerle başlıklarını gönderen bir tarayıcı yapacağız
GideonMax

0

resmi olarak, başlıklar büyük / küçük harfe duyarsızdır, ancak her kelimenin ilk harfini büyük yapmak yaygın bir uygulamadır.
ancak yaygın bir uygulama olduğu için IE gibi bazı programlar başlıkların büyük harfle yazıldığını varsayar.
bu nedenle dokümanlar büyük / küçük harfe duyarsız olduklarını söylerken, kötü programcılar temel olarak dokümanları değiştirmiştir.


-4

Üstbilgiler sözcüğü büyük / küçük harfe duyarlı değildir, ancak İçerik Türü gibi sağda bu şekilde yazmak iyi bir uygulamadır, çünkü büyük / küçük harf duyarlı. aşağıdaki örneğim gibi

headers = headers.set('Content-Type'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.