HTTP başlık satırı sonu stili


161

HTTP üstbilgilerinde hangi satır sonu stili tercih edilir: \r\nveya \nneden?

Yanıtlar:


224

\r\n, çünkü protokol belirtiminde satır sonu olarak tanımlanır. RFC2616, bölüm 2.2, "Temel Kurallar" ın başlangıcında, açıkça belirtmektedir :

CR = <US-ASCII CR, satır başı (13)>
LF = <US-ASCII LF, satır besleme (10)>
HTTP / 1.1, CR LF dizisini varlık dışındaki tüm protokol öğeleri için satır sonu işareti olarak tanımlar -vücut

RFC2616 teknik olarak RFC7230 tarafından geçersiz kılınmıştır, ancak önemli değişiklikler yapmaz ve yine CRLF'yi bölüm 3'te sınırlayıcı olarak çağırır ve RFC , "CRLF" olarak tanımlamak için RFC5234, Ek B.1'e başvurur%x0D %x0A .

Bununla birlikte, insanların hangi amaçla olursa olsun standardı kıracağını kabul ederek, bölüm 19.3'te bir "tolerans hükmü" vardır ( doğru diziyi tekrarladığını unutmayın ):

İleti başlığı alanları için satır sonlandırıcısı CRLF dizisidir. Bununla birlikte, bu tür başlıkları ayrıştırırken uygulamaların tek bir LF'yi hat sonlandırıcı olarak tanımasını ve önde gelen CR'yi yoksaymasını öneririz.

Daha yeni RFC7230'da, § 3.5

Başlangıç ​​satırı ve başlık alanları için satır sonlandırıcı CRLF dizisi olsa da, bir alıcı tek bir LF'yi satır sonlandırıcı olarak tanıyabilir ve önceki CR'leri yok sayabilir.

Bu nedenle, Kötülük olmak veya RFC kurallarını başka bir şekilde ihlal etmek istemiyorsanız kullanın \r\n.


@Fred: Hayır, orada olduğunu çok bariz olarak böyle bir şey - gereksiz tekrarı ve gereksiz yere tekrar ve amaçsızca aynı bilgi bulutlar mesajı tekrarlayarak. Özellikle aynı şey yukarıda alıntılandığında - spesifikasyondan daha az değil.
Piskvor binadan ayrıldı

2
İyi açık cevap. StackOverflow tam olarak bunun için en iyisidir: Blogların ve makalelerin gereksiz ve yardımcı olmayan dağınıklığı olmadan basit açık sorulara basit ve net cevaplar.
Miles Rout

@MilesRout: Teşekkür ederim :)
Piskvor

2
@Pacerier: Böyle bir şeyden hiç bahsetmiyor; esasen "bu HTTP için geçerli tek sözdizimi" olarak belirtildiğinden, diğer her şey geçersiz sözdizimidir. Tabii ki, RFC'yi istediğiniz gibi ihlal edebilirsiniz , sizi durduracak kimse yok - ancak teknik olarak artık bir HTTP istemcisi uygulamıyorsunuz, sadece benzer bir şey gibi görünüyor;)
Piskvor binadan ayrıldı

2
RFC2616 obsoletes RFC7230 aynı metni içeren Bölüm 3.5
Yas

22

\ r \ n çünkü RFC 2616 böyle diyor (Bölüm 2.2, "Temel Kurallar"):

HTTP / 1.1, CR LF dizisini
varlık gövdesi dışındaki tüm protokol öğeleri için satır sonu işareti olarak tanımlar (
toleranslı uygulamalar için bkz. Ek 19.3 ). Bir varlık gövdesi içindeki satır sonu işareti, bölüm 3.7'de açıklandığı gibi ilişkili ortam türüne göre tanımlanır.

   CRLF           = CR LF

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.