Реализация HTTP
Пункты всюду указаны для RFC 1945.
- поддержка строки запроса для версий HTTP/0.9 и HTTP/1.0 (п. 3.1)
- реализация метода HEAD
- поддержка absoluteURI и relativeURI (п. 3.2.1)
- правильное представление даты/времени (в GMT, п. 3.3)
- поддержка If-Modified-Since в запросе
- поддержка Referer в запросе (запись в соответствующее поле log-файла
- поддержка User-Agent в запросе (запись в соответствующее поле log-файла
- поддержка заголовка Server в ответе (имя и версия сервера)
- поддержка заголовка Last-Modified в ответе
- поддержка кода "400" (Bad Request) в ответе
- поддержка кода "403" (Forbidden) в ответе
- поддержка кода "404" (Not Found) в ответе
- поддержка кода "500" (Internal Server Error) в ответе
- поддержка кода "501" (Not Implemented) в ответе
- реализация таблицы соответствия суффиксов файлов и MIME-типов (заголовок Content-type в ответе)
Безопасность
- Отсутствие потенциальных переполнений стека (stack overflow)
- Ограничение на максимальное количество порожденных процессов
- Отсутствие возможности выхода за пределы разрешенного каталога
GET ../../../путь/к/секретному/файлу.txt HTTP/1.0
- Возможность контролировать доступ (субъекты - IP-адреса и/или доменные имена, объекты - каталоги, файлы или URI)
Файл журнала
- Формат log-файла, позволяющий использовать существующие генераторы отчетов о посещаемости web-сервера
Стиль
- Нерациональный выбор имен переменных или функций
- Отсутствие форматирования кода ("отступов")
- Чрезмерно сложные и неудобочитаемые программные конструкции
- Непоследовательность в стиле
- "Загадочные числа"
n = 426;
- Отсутствие пояснительного комментария там, где он нужен,
или комментарии, говорящие об очевидном
i = i + 1 /* добавить к i единицу */
- Отсутствие заголовочного комментария
- Отсутствие проверки значения, возвращаемого функцией
fd = open(...); write(fd, buf, len); close(fd);
- Использование неоднозначных конструкций языка
array[i++] = i;
- Использование непереносимых или машинно-зависимых конструкций
без необходимости
4 вместо sizeof(int)
Оценка
- Наличие как-нибудь-работающего web-сервера оценивается в 0 баллов
- Отсутствие как-нибудь-работающего web-сервера оценивается -20 баллов
- При появлении одинаковых участков кода все, у кого они появляются, получают -20 баллов
- За каждый реализованный пункт из разделов "Реализация HTTP", "Безопасность" и "Файл журнала" добавляется один балл.
- За каждый пункт из раздела "Стиль" вычитается два балла. Таким образом, сумма баллов может быть от -20 до +20