2013-06-20 14 views
6

Invio una grande quantità di dati nella risposta al client in formato di codifica di trasferimento chunked.Risposta inviata in codifica di trasferimento chunked e che indica che si sono verificati errori dopo che alcuni dati sono già stati inviati

Come dovrei occuparmi di eventuali errori che si verificano a metà del durante la scrittura della risposta?

Mi piacerebbe sapere se esiste una pratica raccomandata dalle specifiche HTTP in merito ai clienti per sapere che in effetti la risposta non è riuscita, ma che il server ha riscontrato qualche problema.

risposta

5

Dopo aver iniziato a inviare le intestazioni HTTP al client, non è possibile inviare altro. Devi terminare l'invio della risposta che intendevi inviare, ovvero i dati frammentati e le intestazioni associate. Se si verifica un errore a metà strada, non è possibile segnalare tale errore al client. Tutto quello che puoi fare è chiudere la connessione. O il client non riceve tutte le intestazioni o non riceve il blocco di lunghezza 0 che termina alla fine della risposta. In entrambi i casi è sufficiente che il client sappia che il server ha riscontrato un errore durante l'invio.

+0

Grazie Remy. Sì ... giusto, sono consapevole che le intestazioni vengono inviate per prime e non c'è modo di modificarle una volta che avremo iniziato a scrivere nello stream. Come hai suggerito, attualmente chiudo la connessione, ma volevo sapere se esiste un altro modo in cui le specifiche HTTP dicono come si potrebbe far sapere al client. Il chunk di lunghezza 0 interessante, controllerò per vedere se posso fare qualcosa in quell'area. –

+0

Ci sono solo due modi in cui puoi far sapere al cliente che qualcosa è andato storto. Chiudi la connessione (che è ciò che dovresti fare) poiché qualcosa di diverso dal ricevere l'ultimo chunk di 0 lunghezze è un errore, oppure metti un'intestazione HTTP personalizzata nel piè di pagina chunked dopo aver inviato l'ultimo blocco di 0-lenth. La maggior parte dei client probabilmente ignorerà tale intestazione, ma se stai scrivendo il tuo client, puoi cercare quell'intestazione. –

+0

Certo..grazie! Remy ... –