Простой HTTP-сервер в C - как ответить на браузер?

мой сервер отправляет образец заголовка ответа с телом на запрос:

    static char* not_found_response_template = 
      "HTTP/1.1 404 Not Found\n"
      "Content-type: text/html\n"
      "\n"
      "<html>\n"
      " <body>\n"
      "  <h1>Not Found</h1>\n"
      "  <p>The requested URL was not found on this server.</p>\n"
      " </body>\n"
      "</html>\n";


    len = strlen(not_found_response_template);
    send(newSct, not_found_response_template, len, 0);

он отправляет его правильно, но Firefox продолжает загружаться, пока я не отменю передачу.

плагин firefox HttpRequestHelper показывает это:

ПОЛУЧИТЬ локальный хост: 6666

-- ответ -- 404 Not Found Content-Type: text/html

почему контент не загружается?


person XHotSniperX    schedule 26.03.2013    source источник
comment
Для заголовка http используйте разделители строк \r\n. Это может быть не так, но я не вижу здесь ничего плохого, и стандарт предписывает терминаторы CRLF для трафика протокола.   -  person jthill    schedule 27.03.2013


Ответы (2)


Попробуйте сбросить и/или закрыть сокет после отправки ответа.

person Craig McQueen    schedule 26.03.2013
comment
@XHotSniperX отключает сокет перед закрытием - person Eric Urban; 27.03.2013

HTTP требует, чтобы строки заканчивались CR+LF, поэтому попробуйте \r\n.

person Kerrek SB    schedule 26.03.2013
comment
@XHotSniperX Это не значит, что вы должны злоупотреблять стандартами. - person Eric Urban; 27.03.2013
comment
Нет, это означает, что это должен быть не ответ, а комментарий, поскольку он не решает проблему. - person mid; 20.07.2018