Richiedi il tipo di contenuto di errori HTTP

4

HTTP consente più rappresentazioni di una risorsa. L'intestazione Accept consente al client di scegliere la rappresentazione della risorsa.

GET /foo/bar HTTP/1.1
Accept: application/pdf

GET /foo/bar HTTP/1.1
Accept: text/html

GET /foo/bar HTTP/1.1
Accept: image/svg+xml

Se la risposta è 200 OK, si presume che l'entità sia la risorsa di quel tipo di contenuto.

Ma nelle specifiche ( RFC 2616 ), ci sono molti riferimenti alle entità che non sono risorse: 201 Creato, 202 Accettato, 409 Conflitto, 5xx, ecc.

Ad esempio, per una risposta Proibita 403:

The server understood the request, but is refusing to fulfill it...If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity.

Ma qual è il tipo di entità? Una pagina HTML? JSON?

Mentre leggo lo standard, l'intestazione Accept si applica solo all'entità risorsa . Sarebbe strano generare un PDF del motivo per cui il server era in errore, solo perché la richiesta era per un application/pdf .

C'è un modo per avere rappresentazioni multiple di risorse. Esiste un meccanismo standard per avere rappresentazioni multiple di errori? (Nel mio caso, ci sono client che utilizzano principalmente JSON, o principalmente XML).

Mi rendo conto che posso sempre creare X-Paul-Conflict-Accept e X-Paul-Create-Accept e X-Paul-Forbidden-Accept intestazioni; Ero curioso di sapere se c'era un modo usuale di gestirlo.

    
posta Paul Draper 09.12.2014 - 23:39
fonte

1 risposta

3

RFC2616 afferma: "Qualsiasi risposta contenente un ente-entità può essere soggetta a negoziazione, comprese le risposte di errore." Ciò significa che è accettabile utilizzare l'intestazione Accept per questo scopo, ma che il server non è tenuto a farlo (può scegliere di ignorare le preferenze del browser per i messaggi di errore).

Si noti che in genere, un browser non invierà un'intestazione simile ai propri esempi: il solito modo di utilizzare l'intestazione Accept consente di elencare tutti i formati che è possibile comprendere in ordine di preferenza, non solo un singolo formato. L'applicazione ai messaggi di errore è più evidente in questo caso, piuttosto che richiedere "application / pdf", il browser sarebbe più propenso a richiedere "application / pdf, txt / html, text / plain", che il server è in grado di adempiere.

    
risposta data 10.12.2014 - 13:38
fonte

Leggi altre domande sui tag