Как написать заголовок ошибки HTTP 500 после факта - PullRequest
0 голосов
/ 11 мая 2018

Скажите, у меня есть это:

const writeResponse = function(file: string, s: Socket){

   s.write([
    'HTTP/1.1 200 OK',
    'Content-Type: text/javascript; charset=UTF-8',
    'Content-Encoding: UTF-8',
    'Accept-Ranges: bytes',
    'Connection: keep-alive',
   ].join('\n') + '\n\n');

  getStream(file)
    .once('error', function (e: any) {
      s.end('error: ' + e && e.stack || e.message || util.inspect(e));
    })
    .pipe(s)
    .once('error', function (e: any) {
      s.end('error: ' + e && e.stack || e.message || util.inspect(e));
    });

}

проблема , которую я не могу понять, как решить - если при чтении файла возникает ошибка, как я могу отправить этот заголовок вместо заголовка успеха:

HTTP/1.1 500 Cannot read file

проблема в том, что, насколько мне известно, запись файла в ответ должна происходить после записи заголовков, но что, если при чтении файла возникает ошибка?

1 Ответ

0 голосов
/ 11 мая 2018

Есть две возможности:

  • либо приложение удерживает заголовки до тех пор, пока ошибки не могут возникнуть (например, весь файл был буферизован). В этом случае приложение сможет отправить ошибку 5xx.
  • если приложение отправляет заголовок 200, единственный возможный способ сообщить об ошибке на другом конце - это отправить усеченный ответ. Это возможно только с chunked transfer-encoding: или с content-length:. С connection:close невозможно сказать, что произошла ошибка на уровне HTTP.
...