2013-06-20 3 views
6

Я отправляю большой объем данных в свой ответ клиенту в формате кодирования с каналом передачи.Ответ, отправленный в кодировке с передачей пакетов и с указанием ошибок, произошедших после того, как некоторые данные уже отправлены

Как я должен иметь дело с любыми ошибками, которые происходят в середине во время написания ответа?

Я хотел бы знать, есть ли какая-либо HTTP-спецификация, рекомендованная для этого, для клиентов, чтобы знать, что ответ действительно не успешный, но сервер столкнулся с какой-то проблемой.

ответ

5

Как только вы начали отправлять HTTP-заголовки клиенту, вы не можете отправлять что-либо еще. Вы должны закончить отправку ответа, который вы намереваетесь отправить, т. Е. Записанные данные и связанные заголовки. Если ошибка происходит на полпути через это, невозможно сообщить об этой ошибке клиенту. Все, что вы можете сделать, это закрыть соединение. Либо клиент не получает все заголовки, либо не получает завершающий фрагмент длиной 0 в конце ответа. В любом случае, достаточно, чтобы клиент знал, что во время отправки сервер обнаружил ошибку.

+0

Спасибо Реми. Да ... правильно, я знаю, что заголовки отправляются первыми, и нет способа изменить их, как только мы начнем писать в поток. Как вы предположили, я в настоящее время закрываю соединение, но хотел узнать, есть ли другой способ, который HTTP Spec говорит о том, как можно было сообщить клиенту об этом. Интересно, что кусок длиной 0 длины, я проверю, чтобы увидеть, могу ли я что-то сделать в этой области. –

+0

Есть только два способа, которыми вы могли бы сообщить клиенту, что что-то пошло не так. Закройте соединение (это то, что вы должны делать), поскольку ничего, кроме получения последнего фрагмента длины 0, является ошибкой или же помещает пользовательский заголовок HTTP в разделяемый нижний колонтитул после отправки последнего 0-й части. Большинство клиентов, вероятно, будут игнорировать такой заголовок, хотя, если вы пишете собственный клиент, вы можете посмотреть этот заголовок. –

+0

Уверен..эты! Remy ... –

 Смежные вопросы

  • Нет связанных вопросов^_^