Differenza tra le intestazioni HTTP Accept e Content-Type


119

Quindi l' Acceptintestazione indica al server il tipo MIME della risorsa che il browser sta cercando. Ad esempio, il server può inviare testo normale, HTML, JSON, ecc.

OK, ha senso, ma quando guardo l' Content-Typeintestazione e sembra che stia facendo la stessa cosa. Ad esempio, indica al server che desidera testo o JSON.

Quindi qual è la differenza tra Accepte Content-Typele intestazioni HTTP?

Risposte:


155

Come noterai correttamente, l' intestazione Accept viene utilizzata dai client HTTP per comunicare al server quali tipi di contenuto accetteranno. Il server invierà quindi una risposta, che includerà un'intestazione Content-Type che indica al client quale sia effettivamente il tipo di contenuto del contenuto restituito.

Tuttavia, come avrai notato, le richieste HTTP possono contenere anche intestazioni Content-Type. Perché? Bene, pensa alle richieste POST o PUT . Con questi tipi di richieste, il client sta effettivamente inviando un mucchio di dati al server come parte della richiesta, e l'intestazione Content-Type dice al server quali sono effettivamente i dati (e quindi determina come il server li analizzerà).

In particolare, per una richiesta POST risultante da un invio di un modulo HTML, il Tipo di contenuto della richiesta sarà (normalmente) uno dei tipi di contenuto del modulo standard di seguito, come specificato dall'attributo enctypesul <form>tag:

  • application/x-www-form-urlencoded (impostazione predefinita, precedente, più semplice, leggermente meno sovraccarico per piccole quantità di testo ASCII semplice, nessun supporto per il caricamento di file)
  • multipart/form-data (più recente, aggiunge il supporto per i caricamenti di file, più efficiente per grandi quantità di dati binari o testo non ASCII)

22
  • Accetta : è ciò che il browser è in grado di digerire, ad esempio, tutte le lingue che qualcuno può capire.
  • Tipo di contenuto : è in quale formato sono i dati effettivi, ad esempio in quale lingua qualcuno sta parlando. Dal momento che i computer non possono (beh, ora possono) riconoscere altri tipi come la gente può dire "oh, è tedesco!" o "sta parlando cinese!"

1
Non necessariamente un browser, ma qualsiasi client http.
Jim Aho,

20

Accettare è come

Ecco la mia richiesta e vorrei (accettare) questo formato di risposta

Content-Type è come

Ecco la mia richiesta (o risposta) e questo (Content-Type) è il formato del contenuto che sto inviando nella mia richiesta (o risposta)


So di essere in ritardo qui, ma sono curioso, cosa accadrebbe se il formato di risposta non fosse inviato nel formato "Accetta" dal server?
grido

1
Spetterebbe al cliente decidere @shriek. Immagino che la maggior parte dei client http (o browser) guarderà "in modo intelligente" i dati reali e vedrà cosa sono veramente. Forse un client potrebbe anche ignorare la risposta se si suppone che sia JSON, ma l'analisi non riesce perché sembra essere qualcos'altro.
Jim Aho,

5

È una conversazione richiesta-risposta, quindi il client

  • invia una richiesta di "Content-Type" e
  • si aspetta di ricevere la risposta del tipo di supporto "Accetta".

Non corretto. Accetta è un'intestazione di richiesta. Vedi la risposta accettata
darron,

2
@darron No, questa risposta è corretta. Non sta dicendo che non è un'intestazione di richiesta, sta dicendo che il suo scopo è quello di dire al server che tipo di risposta si aspetta di ottenere. Un po 'ridondante con le altre risposte, ma penso che sia il più conciso. +1.
Todd Menier,

0

Accettare

L'intestazione HTTP della richiesta Accept pubblicizza i tipi di contenuto, espressi come tipi MIME, che il client è in grado di comprendere. Utilizzando la negoziazione del contenuto, il server seleziona una delle proposte, la utilizza e informa il client della sua scelta con l'intestazione della risposta Content-Type. I browser impostano valori adeguati per questa intestazione a seconda del contesto in cui viene effettuata la richiesta: quando si recupera un foglio di stile CSS, viene impostato un valore diverso per la richiesta rispetto a quando si recupera un'immagine, un video o uno script.

( fonte: developer.mozilla.org )

Tipo di contenuto

L'intestazione dell'entità Content-Type viene utilizzata per indicare il tipo di supporto della risorsa.

Nelle risposte, un'intestazione Content-Type indica al client quale sia effettivamente il tipo di contenuto del contenuto restituito. I browser eseguiranno lo sniffing MIME in alcuni casi e non seguiranno necessariamente il valore di questa intestazione; per evitare questo comportamento, l'intestazione X-Content-Type-Options può essere impostata su nosniff.

Nelle richieste (come POST o PUT), il client comunica al server quale tipo di dati viene effettivamente inviato.

( fonte: developer.mozilla.org )

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.