(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Мобильные платформы | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Выпускники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация

Реализация HTTP

Пункты всюду указаны для RFC 1945.

  1. поддержка строки запроса для версий HTTP/0.9 и HTTP/1.0 (п. 3.1)
  2. реализация метода HEAD
  3. поддержка absoluteURI и relativeURI (п. 3.2.1)
  4. правильное представление даты/времени (в GMT, п. 3.3)
  5. поддержка If-Modified-Since в запросе
  6. поддержка Referer в запросе (запись в соответствующее поле log-файла
  7. поддержка User-Agent в запросе (запись в соответствующее поле log-файла
  8. поддержка заголовка Server в ответе (имя и версия сервера)
  9. поддержка заголовка Last-Modified в ответе
  10. поддержка кода "400" (Bad Request) в ответе
  11. поддержка кода "403" (Forbidden) в ответе
  12. поддержка кода "404" (Not Found) в ответе
  13. поддержка кода "500" (Internal Server Error) в ответе
  14. поддержка кода "501" (Not Implemented) в ответе
  15. реализация таблицы соответствия суффиксов файлов и MIME-типов (заголовок Content-type в ответе)

Безопасность

  1. Отсутствие потенциальных переполнений стека (stack overflow)
  2. Ограничение на максимальное количество порожденных процессов
  3. Отсутствие возможности выхода за пределы разрешенного каталога
    GET ../../../путь/к/секретному/файлу.txt HTTP/1.0
  4. Возможность контролировать доступ (субъекты - IP-адреса и/или доменные имена, объекты - каталоги, файлы или URI)

Файл журнала

  1. Формат log-файла, позволяющий использовать существующие генераторы отчетов о посещаемости web-сервера

Стиль

  1. Нерациональный выбор имен переменных или функций
  2. Отсутствие форматирования кода ("отступов")
  3. Чрезмерно сложные и неудобочитаемые программные конструкции
  4. Непоследовательность в стиле
  5. "Загадочные числа"
    n = 426;
  6. Отсутствие пояснительного комментария там, где он нужен, или комментарии, говорящие об очевидном
    i = i + 1 /* добавить к i единицу */
  7. Отсутствие заголовочного комментария
  8. Отсутствие проверки значения, возвращаемого функцией
    fd = open(...); write(fd, buf, len); close(fd);
  9. Использование неоднозначных конструкций языка
    array[i++] = i;
  10. Использование непереносимых или машинно-зависимых конструкций без необходимости
    4 вместо sizeof(int)

Оценка