Funzionalità nascoste di HTTP


85

Quali caratteristiche nascoste di HTTP pensi valga la pena menzionare?

Per funzionalità nascoste intendo funzionalità che già fanno parte dello standard ma ampiamente piuttosto sconosciute o inutilizzate.

Solo una caratteristica per risposta, per favore.

Risposte:


124

Deve essere il codice di stato 418 I'm a teapot , parte del protocollo Hyper Text Coffee Pot Control (un'estensione di HTTP). Mi fa ridere tutte le volte.

2.3.2 418 Sono una teiera

Qualsiasi tentativo di preparare il caffè con una teiera dovrebbe risultare nel codice di errore "418 I'm a teapot". Il corpo dell'entità risultante PU essere basso e robusto.


6
Questo è impressionante!
Josh

3
Ho effettivamente implementato questo stato in uno script per quando nessun altro stato è appropriato.
mancanza di palpebre

4
Dalla RFC: "Il corpo dell'entità risultante PU essere basso e robusto".
Piskvor ha lasciato l'edificio il

2
Ho scritto il mio server HTTP e mi sono assicurato di implementarlo.
Matt Joiner

Non era questo un vero protocollo che avevano scritto per inviare comandi alla macchina da caffè, sono sicuro di averlo letto da qualche parte! - Hanno costruito una macchina da caffè per accettare comandi tramite questo protocollo, quindi in realtà è un protocollo legittimo
RobertPitt


42

Risposta ovvia: metodi PUT, DELETE, TRACE, OPTIONS, CONNECT

La maggior parte delle persone conosce i metodi GET e POST perché è quello che usano quando creano i moduli. Anche i browser usano molto HEAD. Gli altri metodi sono molto meno conosciuti; sono utilizzati principalmente da applicazioni più specifiche.


1
Bella risposta, potresti fornire maggiori informazioni su tutti i metodi?
Louis

2
Puoi leggere tutto su di esso su vari siti, come en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
Martijn

1
Sfortunato, quanti browser supportano questi metodi? (Lo so, è un peccato)
Pascal Qyy

Perché nessuno include tutti PATCH in questi elenchi?
tobib

29

Qualcuno ha mai visto 402 pagamento richiesto ?


17
Sì. In HTTP <-> gateway SMS. Se esaurisci il credito prepagato, inizierai a ricevere 402 risposte.
Kornel

26
@ zildjohn01: Ciò significa ... pausa drammatica ... CHE VIVIAMO NEL FUTURO! ;)
Piskvor ha lasciato l'edificio il

6
@Piskvor: osservazione brillante. Sottolineo anche che rifiuto questo futuro, ed è un patetico stack di software.
Matt Joiner

3
"Il futuro è già qui, solo che non è distribuito in modo uniforme".
XTL

25

204 Nessun contenuto

Pensavo che 204 fosse solo se non hai contenuto da visualizzare, ma la specifica sembra che ci sia un comportamento aggiuntivo per cui il programma utente "non cambia la sua visualizzazione del documento".

Secondo HOWTO: configurare Apache per restituire un HTTP 204 (nessun contenuto) per AJAX

FWIW, Google in realtà fa qualcosa di simile. Ogni volta che un utente fa clic su un collegamento nei risultati di ricerca, Google esegue il ping di se stesso per registrare il clic; il codice di risposta dal ping è un HTTP 204.

Inoltre, 204 No Content propone che questa sia una buona tecnica per "web bug" o "beacon" se si desidera risparmiare su ogni ultimo byte di traffico di rete possibile.


17

Codice di risposta410 Gone :

(...) i proprietari dei server desiderano che i collegamenti remoti a quella risorsa vengano rimossi. (...)

Gli spider web (in particolare Google) deindicizzeranno (in genere alla successiva scansione) una pagina che inizia a restituire 410.


16

In contenuto dinamico utilizzare Last_Modified o ETag header

A volte hai contenuto dinamico che può essere grande e / o costoso da generare e che potrebbe non cambiare da richiesta a richiesta. Puoi aggiungere un'intestazione Last_Modified o ETag alla risposta generata.

Nella parte superiore del tuo costoso codice dinamico puoi utilizzare If_Modified_Since o If_None_Match per determinare se il richiedente del contenuto è già aggiornato. In tal caso, modificare lo stato della risposta in "304 Unmodified" e terminare la richiesta.

Alcune tecnologie lato server forniscono formalmente tali funzionalità, ma è possibile eseguire le operazioni descritte sopra anche in ASP-Classic.

Notare che questo differisce dall'impostazione delle intestazioni Cache-Control, Expires in quanto garantisce che il client abbia sempre le informazioni più recenti su richiesta.


13

È possibile richiedere di riprendere una (grande) risposta HTTP (es. Download di file) utilizzando Rangee If-Rangerichiedere intestazioni rispettivamente con l'intervallo di byte specificato e l'identificatore di file univoco o il timestamp di modifica del file. Ciò è possibile se il server ha inviato le Accept-Ranges: bytese ETago Last-Modifieddi risposta intestazioni sulla risposta iniziale con, rispettivamente, la notifica che le richieste di intervallo di byte supportati dal server, l'identificatore unico file e il timestamp di modifica del file.

La risposta iniziale può essere simile (di ETagsolito è composta da nome file, dimensione e data e ora dell'ultima modifica):

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

Quando il download viene interrotto ad esempio su 1KB (1024 byte), il client può riprenderlo come segue:

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

Che dovrebbe restituire questa risposta con i byte appropriati nel corpo:

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

1 Mbyte = 1024 kbyte, 1 kbyte = 1024 byte, che fa 1 Mbyte = 1024 * 1024 byte
Maerlyn

12

ReST cerca di spingere HTTP ai suoi limiti come protocollo di interfaccia.

Non è una caratteristica nascosta , ma osservando API ReST ben definite si può ottenere una buona presa su come HTTP dovrebbe funzionare e trovare meravigliosi esempi di ciò che può essere ottenuto con una semplice combinazione di metodi HTTP, codici di stato e intestazioni per e avanti.



8

Il protocollo ti consente di definire i tuoi campi personalizzati. Questi possono essere utilizzati per trasportare altre informazioni se non si desidera utilizzare i cookie per questo.


1
Di sicuro non lo sapevo!
netrox

6

Stato HTTP 100 (continua)

Un client può inviare un messaggio di richiesta con un corpo della richiesta per determinare se il server di origine è disposto ad accettare la richiesta.

In alcuni casi, potrebbe essere inappropriato o altamente inefficiente per il client inviare il corpo se il server rifiuterà il messaggio senza guardare il corpo.

Potrebbe essere utilizzato per evitare il traffico da client non autorizzati .. e / o dove la larghezza di banda è un bene prezioso.

Tuttavia, per il pieno utilizzo di questa funzione ci sono alcuni criteri per HTTP1.1 Client, Server e Proxy. Vedere HTTP / 1.1 RFC 2616 per ulteriori letture sulle connessioni HTTP.


3

Codici di stato :

  • Quando viene chiamato l' URI http://www.domain.invalid/index.php?id=44 , se query ( id=44) non può restituire risorse, perché non restituire un codice di stato 404?
  • Quando viene chiamato l' URI http://www.domain.invalid/index.php?id=foo mentre idaccetta solo numeri interi, perché non restituire un codice di stato 400?
  • Perché, quando inserisci login / password errati, quasi tutte le applicazioni web restituiscono un messaggio del tipo "Autenticazione fallita" con codice di stato 200(ok, nessun problema, lo fai bene) instade di 401?

Sì, i codici di stato sembrano essere una sorta di funzionalità segreta di HTTP per alcuni sviluppatori web ... Ma mi chiedo se la più occulta di tutte le "funzionalità" di questo protocollo non sia la sua RFC !


2
Penso che 401sia solo per l'autenticazione HTTP e non altri tipi. Inoltre, fa sì che la maggior parte dei browser chieda all'utente una password http.
CodesInChaos

Hai ragione, e questo è il punto! Ecco un'altra caratteristica "nascosta" di HTTP: HTTP-Authentication... ^^ È così difficile usarla invece di reinventare la ruota?
Pascal Qyy

1
@G. Qyy: Per un'applicazione web, fa una grande differenza se il suo database utente è memorizzato in qualche database SQL, che può facilmente manipolare, o in qualche file di configurazione del server web (abbastanza statico), come i .htaccessfile di Apache, che probabilmente solo un il webmaster può aggiornare. Pertanto, l'autenticazione HTTP non è in realtà molto adatta per gestire i diritti utente di un'applicazione e l'accesso / disconnessione.
stakx - non contribuisce più il

4
@stakx: è facile usare MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP o altri per memorizzare le informazioni HTTP-Authentication, e anche PHP è in grado di gestire HTTP-Authentication( php.net/manual/en/features.http-auth.php ). Se sei uno sviluppatore web, devi acquisire le basi dell'amministrazione del server, solo per motivi di sicurezza! Come sviluppatore web deve avere competenze di webmaster / sysadmin, può eseguire facilmente queste attività.
Pascal Qyy

1
Ma comunque non si tratta della mia risposta: per me il problema principale rimangono i codici di stato errati quasi sistematici restituiti dalle app web, anche mettendo da parte l'autenticazione HTTP.
Pascal Qyy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.