2012-08-01 13 views
7

Esistono intestazioni che è possibile inviare con una richiesta HTTP che comunica al server Web di inviare solo intestazioni in risposta e nessun contenuto del corpo?Invio di una richiesta HTTP che indica al server di restituire solo intestazioni e nessun corpo?

Sto utilizzando cURL per effettuare tali richieste, ma tecnicamente presumo che dovrebbe essere possibile con l'intestazione semplice inviata come parte della richiesta.

Ad esempio, esiste un codice di risposta HTTP 304 non modificato. Quando si effettua una richiesta al server con il proprio tag della cache o le informazioni datetime, il server può rilevarlo e restituire solo le intestazioni come risposta che indicano all'agente utente di utilizzare la propria cache come risposta. Ciò significa che la risposta del server è molto, molto piccola quando si tratta di larghezza di banda.

Ma c'è un'intestazione che è possibile inviare ai server che fanno in modo che il server restituisca solo un'intestazione e nessun contenuto del corpo?

L'idea è di fare richieste HTTP che altrimenti potrebbero restituire grandi quantità di dati, molto piccoli. Come una chiamata API che restituirebbe dati JSON o un log, quando in realtà l'unica cosa a cui l'agente utente è interessato è assicurarsi che la richiesta sia passata e nient'altro. Ciò al fine di minimizzare la larghezza di banda da e verso il server nei casi in cui il corpo potrebbe esistere, ma non è necessario in alcun modo nel contesto di ciò che sta facendo lo user agent.

Mentre sarebbe possibile progettare un'API che ascolti un'intestazione personalizzata specifica o qualcosa del genere, preferisco non andare in questo modo a meno che non sia necessario. Ma non sono riuscito a trovare se esiste un modo standardizzato per fare una richiesta HTTP che dice al server di non inviare alcun contenuto del corpo?

risposta

14

Se il server lo supporta, c'è l'azione HEAD (al contrario di GET o POST). Questo dice al server di inviare solo le intestazioni e nessun corpo.

Il metodo HEAD è identico a GET tranne che il server NON DEVE restituire un messaggio-corpo nella risposta.

2

Stai cercando il verbo HEAD. Se stai usando CURL con PHP, questo farà il trucco:

curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($c, CURLOPT_CUSTOMREQUEST, 'HEAD'); 
curl_setopt($c, CURLOPT_HEADER, 1); 
curl_setopt($c, CURLOPT_NOBODY, true); 

Se si utilizza PHP anche se (e può benissimo contare anche in situazioni diverse), lo script continuerà a funzionare until any output is sent (la nota sotto REQUEST_METHOD). Quindi, se sei preoccupato per lo stress del server, potresti aver bisogno di qualcos'altro se questo si adatta.

A me sembra che si sta più alla ricerca di un 'ping', quindi perché non semplicemente richiedere un file che non fa altro che restituire un OK di qualche tipo, forse anche solo l'HTTP 200 OK (ad esempio un file vuoto)?

+0

Stavo cercando la richiesta HEAD, sì. Stavo principalmente cercando un modo per ridurre la larghezza di banda, non lo stress del server dalla generazione di contenuti (lo gestirò diversamente). Stavo solo cercando un modo standardizzato piuttosto che qualche regola o parametro API che lo faccia accadere. Ma grazie! – kingmaple

Problemi correlati