Собственный http сервер на java

  • 29 марта 2012 г.
  • 1112 Слова
«Построение собственного http сервера»
Начальные сведения:
Для общения клиент – сервер, для обмена, используется технология сокетов. Через сокеты передаются массивы байт, которые в свою очередь содержат коды символов. В зависимости от браузера будет использована та или иная кодировка ( рекомендуемая UTF-8, так как она присутствует на любой операционной системе).
Сокеты – это абстрактныйобъект, являющийся представляющий точку соединения. Существуют сокеты двух видов – серверный (слушающий), который привязывается к порту операционной системы и ожидающий пока на данный порт придет запрос, и клиентский, который передает сообщение.
При создании http сервера требуются оба вида сокетов, в связи с тем, что процедура обмена сообщениями связаны как с получением сообщения, так и с его отправкой.Данная схема изображена на рисунке:










В данной лабораторной работе клиентом будет выступать браузер, а в роли сервера – написанная программа. Их размещение не так важно, так как механизм сокетов может работать как внутри одной машины, так и на разных машинах через локальную сеть, либо интернет.

Форматы запросов и ответ закреплены в описании http. Текущая версия протокола 1.1Протокол описывается в RFC 1945, RFC 2616.
Общая схема построения запроса:
1. Стартовая строка — определяет тип сообщения;
2. Заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения;
3. Тело сообщения — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.
Запрос можно передавать только в таком порядке. Стартовая строка – являетсяобязательным атрибутом любого http запроса, в то время заголовок и тело сообщения могут отсутствовать.
Стартовая строка различна для запросов и ответов.
Для запроса она имеет вид:
Метод URI HTTP/Версия
Метод – это действие, которое клиент хочет совершить, может состоять из любых символов, кроме управляющих и пробелов.
URI – путь к запрашиваемому документу.
Версия – две арабские цифры, разделенные точкой
Дляответа:
HTTP/Версия КодСостояния Пояснение
Версия – две арабские цифры, разделенные точкой.
КодСостояния – три арабские цифры. По коду статуса определяется дальнейшее содержимое сообщения и поведение клиента.
Пояснение – текстовое короткое пояснение к коду ответа для пользователя. Никак не влияет на сообщение и является необязательным.
Методов у клиента достаточно много, для лабораторнойпотребуется только два:
GET
Используется для запроса содержимого указанного ресурса
HEAD
Аналогичен методу GET, за исключением того, что в ответе сервера отсутствует тело.
Эти методы являются обязательными для реализации на любом http сервере.
Заголовки это строки в HTTP-сообщении, содержащие разделённую двоеточием пару параметр-значение. Формат заголовков соответствует общему формату заголовков текстовыхсетевых сообщений ARPA (RFC 822). Заголовки должны отделяться от тела сообщения хотя бы одной пустой строкой.
Тело сообщения если оно присутствует, используется для передачи тела объекта, связанного с запросом или ответом. В нашем случае, оно будет использовано для передачи клиенту содержимого html страницы, либо картинок.
Теперь рассмотрим такой пример общения:
Браузер делает запрос серверу
GET/index.html HTTP/1.1 //Запрос страницы index.html
Host: localhost:8080 //Адрес, где находится страница

На этот запрос сервер ответит
HTTP/1.1 200 OK //Сервер отвечает что ресурс// доступен и отдает его содержимое
Server: MyServer //Имя сервера
Content-Type: text/html //Тип содержимого
Content-Length: 49...