Python: intestazioni HTTP
La richiesta e la risposta tra client e server coinvolge l'intestazione e il corpo del messaggio. Le intestazioni contengono informazioni specifiche del protocollo che vengono visualizzate all'inizio del messaggio non elaborato inviato tramite connessione TCP. Il corpo del messaggio viene separato dalle intestazioni utilizzando una riga vuota.
Esempio di intestazioni
Le intestazioni nella risposta http possono essere classificate nei seguenti tipi. Di seguito è riportata una descrizione dell'intestazione e un esempio.
Cache-Control
Il campo di intestazione generale Cache-Control viene utilizzato per specificare le direttive che DEVONO essere obbedite da tutto il sistema di memorizzazione nella cache. La sintassi è la seguente:
Cache-Control : cache-request-directive|cache-response-directive
Un client o un server HTTP può utilizzare l'estensione Cache-controlintestazione generale per specificare i parametri per la cache o per richiedere determinati tipi di documenti dalla cache. Le direttive di memorizzazione nella cache sono specificate in un elenco separato da virgole. Per esempio:
Cache-control: no-cache
Connessione
Il campo di intestazione generale della connessione consente al mittente di specificare le opzioni desiderate per quella particolare connessione e non devono essere comunicate dai proxy su ulteriori connessioni. Di seguito è riportata la semplice sintassi per l'utilizzo dell'intestazione della connessione:
Connection : "Connection"
HTTP / 1.1 definisce l'opzione di "chiusura" della connessione per il mittente per segnalare che la connessione verrà chiusa dopo il completamento della risposta. Per esempio:
Connection: close
Per impostazione predefinita, HTTP 1.1 utilizza connessioni persistenti, in cui la connessione non si chiude automaticamente dopo una transazione. HTTP 1.0, d'altra parte, non ha connessioni persistenti per impostazione predefinita. Se un client 1.0 desidera utilizzare connessioni persistenti, utilizza l'estensionekeep-alive parametro come segue:
Connection: keep-alive
Data
Tutti i timestamp di data / ora HTTP DEVONO essere rappresentati in Greenwich Mean Time (GMT), senza eccezioni. Le applicazioni HTTP possono utilizzare una delle seguenti tre rappresentazioni di data / ora:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
Codifica di trasferimento
Il campo Transfer-Encoding general-header indica quale tipo di trasformazione è stato applicato al corpo del messaggio per trasferirlo in sicurezza tra il mittente e il destinatario. Non è la stessa cosa della codifica del contenuto perché le codifiche di trasferimento sono una proprietà del messaggio, non del corpo dell'entità. La sintassi del campo dell'intestazione Transfer-Encoding è la seguente:
Transfer-Encoding: chunked
Tutti i valori di codifica di trasferimento non fanno distinzione tra maiuscole e minuscole.
Upgrade
L' intestazione generale Upgrade consente al client di specificare quali protocolli di comunicazione aggiuntivi supporta e desidera utilizzare se il server ritiene appropriato cambiare protocollo. Per esempio:
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Il campo di intestazione Upgrade ha lo scopo di fornire un semplice meccanismo per la transizione da HTTP / 1.1 a qualche altro protocollo incompatibile.
attraverso
L' intestazione generale Via deve essere utilizzata dai gateway e dai proxy per indicare i protocolli intermedi e i destinatari. Ad esempio, un messaggio di richiesta potrebbe essere inviato da un agente utente HTTP / 1.0 a un proxy interno denominato "fred", che utilizza HTTP / 1.1 per inoltrare la richiesta a un proxy pubblico su nowhere.com, che completa la richiesta tramite inoltrandolo al server di origine su www.ics.uci.edu. La richiesta ricevuta da www.ics.uci.edu avrebbe quindi il seguente campo di intestazione Via:
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Il campo di intestazione Upgrade ha lo scopo di fornire un semplice meccanismo per la transizione da HTTP / 1.1 a qualche altro protocollo incompatibile.
avvertimento
L' intestazione generale Avviso viene utilizzata per fornire informazioni aggiuntive sullo stato o sulla trasformazione di un messaggio che potrebbero non essere riflesse nel messaggio. Una risposta può contenere più di un'intestazione di avviso.
Warning : warn-code SP warn-agent SP warn-text SP warn-date
Esempio
Nell'esempio seguente usiamo il modulo urllib2 per ottenere una risposta usando urlopen. Successivamente applichiamo il metodo info () per ottenere le informazioni di intestazione per quella risposta.
import urllib2
response = urllib2.urlopen('http://www.tutorialspoint.com/python')
html = response.info()
print html
Quando eseguiamo il programma sopra, otteniamo il seguente output:
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Origin: *
Cache-Control: max-age=2592000
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Jul 2018 11:06:07 GMT
Expires: Wed, 01 Aug 2018 11:06:07 GMT
Last-Modified: Sun, 01 Jul 2018 21:05:38 GMT
Server: ECS (tir/CDD1)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 22063
Connection: close