HTTP'nin gizli özellikleri


85

HTTP'nin hangi gizli özelliklerinden bahsetmeye değer olduğunu düşünüyorsunuz?

Gizli özellikler derken, zaten standardın bir parçası olan ancak yaygın olarak bilinmeyen veya kullanılmayan özellikleri kastediyorum.

Lütfen cevap başına sadece bir özellik.

Yanıtlar:


124

O olmalı ben bir çaydanlık olduğum 418 durum kodu parçasıdır Hiper Metin Cezve Denetimi Protokolü (HTTP uzantısıdır). Her seferinde beni güldürür.

2.3.2 418 Ben bir çaydanlığım

Bir çaydanlık ile kahve demlemeye yönelik herhangi bir girişim, "418 Ben bir çaydanlığım" hata koduyla sonuçlanmalıdır. Ortaya çıkan varlık gövdesi kısa ve sağlam OLABİLİR.


3
Aslında bu durumu, başka hiçbir durumun uygun olmadığı durumlarda bir komut dosyasında uyguladım.
göz kapaksızlık

4
RFC'den: "Ortaya çıkan varlık gövdesi kısa ve sağlam OLABİLİR."
Piskvor,

2
Kendi HTTP sunucumu yazdım ve bunu uyguladığımdan emin oldum.
Matt Joiner

Bu, oradaki kahve makinesine komut göndermek için yazdıkları gerçek bir protokol değil miydi, eminim bunu bir yerde okudum! - Çok aslında, bu protokolü yoluyla komutları kabul etme meşru bir protokol bir kahve makinesi inşa
RobertPitt


42

Açık cevap: PUT, DELETE, TRACE, OPTIONS, CONNECT yöntemleri

Çoğu insan GET ve POST yöntemlerini bilir çünkü formları oluştururken kullandıkları şey budur. Tarayıcılar ayrıca HEAD'i çok kullanır. Diğer yöntemler çok daha az bilinir; çoğunlukla daha özel uygulamalar tarafından kullanılırlar.


1
Güzel cevap, tüm yöntemler hakkında daha fazla bilgi verebilir misiniz?
Louis


1
Şanssız, kaç tarayıcı bu yöntemleri destekliyor? (Biliyorum, yazık)
Pascal Qyy

Neden hiç kimse bu listelerde PATCH içermiyor?
tobib

29

Hiç kimse 402 Ödeme Gerekli gördü mü ?


17
Evet. HTTP <-> SMS ağ geçidinde. Ön ödemeli krediniz biterse, 402 yanıt almaya başlayacaksınız.
Kornel

26
@ zildjohn01: Bu demek oluyor ki ... dramatik bir duraklama ... GELECEKTE YAŞIYORUZ ! ;)
Piskvor

6
@Piskvor: Harika bir gözlem. Ayrıca bu geleceği reddettiğimi ve bunun acıklı yazılım yığınları olduğunu da belirteceğim.
Matt Joiner

3
"Gelecek zaten burada, sadece eşit olarak dağıtılmadı."
XTL

25

204 İçerik Yok

204'ün sadece görüntülenecek içeriğiniz yoksa olduğunu sanıyordum, ancak spesifikasyon , kullanıcı aracısının "belge görünümünü değiştirmemesi" gibi ek bir davranış var gibi görünüyor.

NASIL YAPILACAĞINA göre : Apache'yi AJAX için bir HTTP 204 (İçerik Yok) Döndürecek Şekilde Yapılandırma

FWIW, Google aslında benzer bir şey yapıyor. Bir kullanıcı arama sonuçlarındaki bir bağlantıyı her tıkladığında, Google tıklamayı kaydetmek için kendisine ping atar; ping'den gelen yanıt kodu bir HTTP 204'tür.

Ayrıca, 204 İçerik Yok , yapabileceğiniz her ağ trafiğinin son baytından tasarruf etmek istiyorsanız, bunun "web hataları" veya "işaretçiler" için iyi bir teknik olduğunu önermektedir.


17

Yanıt Kodu410 Gone :

(...) sunucu sahipleri bu kaynağa olan uzak bağlantıların kaldırılmasını istiyor. (...)

Web örümcekleri (en önemlisi Google) 410 döndürmeye başlayan bir sayfanın indeksini kaldırır (tipik olarak bir sonraki taramada).


16

Dinamik içerikte Last_Modified veya ETag başlığını kullanın

Bazen büyük ve / veya oluşturulması maliyetli olabilecek ve istekten diğerine değişmeyen dinamik içeriğiniz vardır. Oluşturulan yanıtınıza bir Last_Modified veya ETag başlığı ekleyebilirsiniz.

Pahalı dinamik kodunuzun en üstünde, içerik istekte bulunanın halihazırda sahip olup olmadığını belirlemek için If_Modified_Since veya If_None_Match kullanabilirsiniz. Yanıt durumunu "304 Değiştirilmemiş" olarak değiştirin ve isteği sonlandırın.

Bazı sunucu tarafı teknolojiler bu tür özellikleri resmi olarak sağlar, ancak yukarıdakileri düşük ASP-Classic'te bile yapabilirsiniz.

Bunun Cache-Control, Expires başlıklarını ayarlamaktan farklı olduğunu, istemcinin her zaman talep üzerine en son bilgileri almasını sağladığını unutmayın.


13

Sen isteyebilir devam kullanılarak (büyük) HTTP yanıt (örneğin dosya indirme) Rangeve If-Rangesırasıyla belirtilen bayt aralığı ve benzersiz dosya tanımlayıcı veya dosya modifikasyonu zaman damgası ile istek başlıkları. Bu, sunucu, sırasıyla sunucunun bayt aralığı isteklerini, benzersiz dosya tanımlayıcısını ve dosya değiştirme zaman damgasını desteklediğine dair bildirimle birlikte ilk yanıtta Accept-Ranges: bytesve ETagveya Last-Modifiedyanıt başlıklarını göndermişse mümkündür .

İlk yanıt şöyle görünebilir ( ETaggenellikle dosya adı, boyutu ve son değişiklik zaman damgasından oluşur):

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 0-1233/1234

İndirme işlemi, örneğin 1KB'de (1024 bayt) durdurulduğunda, istemci aşağıdaki şekilde devam edebilir:

If-Range: file.ext_1234_1234567890
Range: bytes=1024-

Bu yanıtı vücuttaki uygun baytlarla döndürmeli:

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234

1Mbyte = 1024 kbyte, 1kbyte = 1024 bayt, bu da 1Mbyte = 1024 * 1024 bayt yapar
Maerlyn

12

Dinlenme , HTTP'yi bir arayüz protokolü olarak sınırlarına kadar zorlamaya çalışır.

Bu gizli bir özellik değil , ancak iyi tanımlanmış ReST API'lerine bakarak, HTTP'nin nasıl çalışması gerektiği konusunda oldukça iyi bir kavrayış elde edebilir ve HTTP yöntemlerinin, durum kodlarının ve başlıkların basit bir kombinasyonu ile nelerin elde edilebileceğine dair harika örnekler bulabilir. ve sağa sola.



8

Protokol, kendi özel alanlarınızı tanımlamanıza izin verir. Çerezleri kullanmak istemiyorsanız bunlar başka bilgileri taşımak için kullanılabilir.


6

HTTP 100 (Devam) Durumu

Bir müşteri, bir istek gövdesi ile bir istek mesajı gönderebilir , kaynak sunucunun isteği kabul etmeye istekli olup olmadığını belirlemek için .

Bazı durumlarda, sunucunun göndermesi durumunda istemcinin gövdeyi göndermesi uygun olmayabilir veya son derece verimsiz olabilir. gövdeye bakmadan mesajı reddederse, .

Sahte istemcilerden ve / veya bant genişliğinden kaynaklanan trafikten kaçınmak için kullanılabilir değerli bir meta .

Ancak, bu özelliğin tam olarak kullanılması için HTTP1.1 İstemci, Sunucular ve Proxy'ler için bazı kriterler vardır. HTTP Bağlantıları hakkında daha fazla bilgi için HTTP / 1.1 RFC 2616'ya bakın.


3

Durum kodları :

  • Ne zaman URI http://www.domain.invalid/index.php?id=44 denir eğer sorgu ( id=44) Ressource dönmek olamazdı, neden bir durum kodu vermemelidir 404?
  • URI http://www.domain.invalid/index.php?id=foo çağrıldığında idyalnızca tamsayıları kabul ettiğinde , neden bir durum kodu döndürmüyorsunuz 400?
  • Neden, yanlış giriş / şifre girdiğinizde, neredeyse tüm web uygulamaları , durum kodu (tamam, sorun değil, iyi yapıyorsunuz) ile birlikte "Kimlik doğrulama başarısız" gibi bir mesaj 200veriyor 401?

Evet, durum kodları bazı web geliştiricileri için HTTP'nin bir tür gizli işlevi gibi görünüyor ... Ama merak ediyorum bu protokolün tüm "özelliklerinin" en büyüğü onun RFC'si değil mi ?


2
Bence 401sadece HTTP Kimlik Doğrulaması içindir, diğer türler için değil. Afaik, çoğu tarayıcının kullanıcıdan bir http şifresi istemesine neden olur.
CodesInChaos

Haklısın ve asıl mesele bu! İşte HTTP'nin diğer bir "gizli" özelliği: HTTP-Authentication... ^^ Tekerleği yeniden icat etmek yerine onu kullanmak çok mu zor?
Pascal Qyy

1
@G. Qyy: Bir web uygulaması için, kullanıcı veritabanının kolayca değiştirebileceği bazı SQL veritabanlarında mı yoksa Apache'nin .htaccessdosyaları gibi bazı (oldukça statik) web sunucusu yapılandırma dosyasında - ki bu muhtemelen yalnızca bir web yöneticisi güncelleyebilir. Bu nedenle, HTTP kimlik doğrulaması, bir uygulamanın kullanıcı haklarını yönetmek ve oturum açma / kapatma için pek uygun değildir.
stakx - artık

4
@stakx: Bilgi depolamak için MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP veya diğerlerini kullanmak kolaydır ve HTTP-AuthenticationPHP bile HTTP-Authentication( php.net/manual/en/features.http-auth.php ) işleyebilir . Bir web geliştiriciyseniz, yalnızca güvenlik nedenleriyle sunucu yönetiminin temellerini edinmeniz gerekir! Web geliştiricisinin web yöneticisi / sistem yöneticisi becerilerine sahip olması gerektiğinden, bu görevleri kolayca gerçekleştirebilir.
Pascal Qyy

1
Ama yine de bu cevabımla ilgili değil: benim için asıl sorun, HTTP kimlik doğrulamasını bir kenara bıraksa bile, web uygulamaları tarafından döndürülen neredeyse sistematik yanlış durum kodları olmaya devam ediyor.
Pascal Qyy
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.