
Проект разработан в 1337 школе кодирования Хурибги.
Авторы: @jamiafathiya & @achrafelkhnissi & @abellaismail7
HTTP означает протокол переноса гипертекста, который является протоколом, используемым для передачи гипертекста. Это поднимает два вопроса: что такое протокол и что такое гипертекст? В этом контексте протокол - это система правил, которая позволяет передавать информацию между различными объектами, такими как компьютеры. Hypertext - это устаревший термин для текста, отображаемого на экране компьютера, содержащего гиперссылки для другого текста, то есть веб -документы. Таким образом, протокол передачи гипертекста относится к набору правил, серверов и браузеров, используемых для передачи веб -документов назад и вперед.
HTTP разрешает сеансы, а хранимых состояний используются между браузером и сервером. Если посетитель просматривает фотогалерею, браузер и сервер могут обмениваться информацией о местонахождении посетителя в последовательности, передавая информацию назад и вперед в форме файлов cookie. Когда страница перезагружается, браузер отправляет файл cookie на сервер, указывающий на последнюю позицию, которая позволяет зрителям возобновить с этого момента. Это означает, что, хотя HTTP не является сохранением состояния, он не без заседаний.
| Срок | Определение |
|---|---|
| Браузер | Приложение, используемое для доступа и перемещения между HTML -документами. |
| Пользовательский агент | Приложение, которое действует от имени пользователя, обычно браузер. |
| TCP | Короче говоря, для протокола управления передачей, одним из основных интернет -протоколов, используемых Всемирной паутиной, электронной почтой, FTP и удаленной администрацией. |
| IP | Коротко для интернет -протокола. IP используется для передачи данных между компьютерами по сети. Каждое устройство, подключенное к Интернету, имеет IP -адрес. |
| URL | Короче говоря, для унифицированного локатора ресурсов, адрес, указывающий на ресурс в Интернете. |
| DNS | Коротко для доменных имен сервер. DNS Каталоги всех доменных имен URL -адреса и указывает на них на IP -адреса серверов. |
| Ресурс | Файл или файлы, доступные на сервере при выполнении URL. |
| Сервер | Компьютер в Интернете, в котором используется какая -то форма приложения для хранения данных и обмена, чаще всего приложение веб -сервера. |
| Прокси | Программное или аппаратное обслуживание действует как средний человек между клиентами и серверами. |
| Пары запроса-ответ | Клиенты и серверы общаются через HTTP, используя пары запроса-ответ. Запрос отправляется, и ответ возвращается. |
| Заголовок | Запросы и ответы используют заголовки HTTP для передачи информации туда -сюда. |
| HTTP -запрос метод/глагол | Каждый HTTP -запрос содержит метод, также известный как глагол, который объясняет, какое действие отправитель хочет выполнить на ресурсе (например, получить, положить, удалить). |
| Код ответа на статус | Числовой код в диапазоне от 100 до 500, описывающий, какой тип ответа сервер отправил обратно клиенту. |
| Кеш | Метод хранения данных на клиенте или на сервере для ускорения производительности. |
| Без гражданства | HTTP является без сохранения состояния, что означает, что каждый запрос и ответ уникальный, а состояние не хранится. |
| Печенье | Строка данных передается между клиентом и сервером для создания сессии состояния. |
| Сессия | Клиенты и серверы могут обмениваться информацией о штатах, передавая информацию туда -сюда, создавая сеанс. |


| Метод | Описание | Успех | Отказ |
|---|---|---|---|
| ПОЛУЧАТЬ | Получите указанный ресурс, если доступен | 200 ОК | 404 не найден |
| ПОЧТА | Создайте новый ресурс и добавьте его в коллекцию | 201 создан | 401 несанкционированный, 409 конфликт, 404 не найден |
| ПОМЕЩАТЬ | Обновите существующий идентификатор или идентификатор на основе ресурсов на основе ресурсов | 200 ОК | 401 несанкционированный, 404 не найден, 405 метод не разрешен |
| ПЛАСТЫРЬ | Измените существующий или идентификатор на основе ресурсов на основе ресурсов. | 200 ОК | 401 несанкционированный, 404 не найден, 405 метод не разрешен |
| УДАЛИТЬ | Удалить или идентификатор на основе ресурсов Singleton (вы не можете удалить коллекцию ресурсов) | 200 ОК | 401 Несанкционированный, 404 не найден |
| ВАРИАНТ | Получите доступные варианты из этого ресурса | 200 ОК | - |
| ГОЛОВА | Получите только заголовки ответов из ресурса | 200 ОК | 404 не найден |
Этот раздел включает в себя описание необходимых функций для создания веб -сервера.
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : имя хоста или IP -адрес сервера.
node является NULL , используется IP -адрес локального хоста. service : номер порта сервера.
service является NULL , используется номер порта по умолчанию для обслуживания, запрашиваемой hints . hints : указатель на struct addrinfo , который определяет критерии для выбора структур адресов сокета, возвращаемых в списке, на который указывается res .
hints являются NULL , то возвращенный список включает в себя адреса сокетов для всех типов сокетов для всех семейств протоколов, поддерживаемых семейством адресов указанного узла, и для адреса местного хоста.struct addrinfo :ai_family : Адрес. Семья. Следующие константы определены для поля ai_family :AF_INET : IPv4 Интернет -протоколыAF_INET6 : IPv6 Интернет -протоколыAF_UNIX : локальное общениеAF_UNSPEC : не указаноai_socktype : тип сокета. Следующие константы определены для поля ai_socktype :SOCK_STREAM : обеспечивает секвенированные, надежные, двусторонние байтовые потоки, основанные на соединениях. Можно поддерживать механизм передачи данных вне полосы.SOCK_DGRAM : поддерживает Datagrams (без соединения, ненадежные сообщения фиксированной максимальной длины).SOCK_RAW : обеспечивает доступ к необработанному протоколу сети.SOCK_RDM : предоставляет надежный уровень Datagram, который не гарантирует заказа.SOCK_SEQPACKET : обеспечивает секвенированный слой пакета, который не гарантирует заказа.ai_protocol : протокол для розетки. Следующие константы определены для поля ai_protocol :IPPROTO_TCP : протокол управления передачейIPPROTO_UDP : протокол Datagram пользователяIPPROTO_RAW : интерфейс протокола RAWIPPROTO_IP : интернет -протоколIPPROTO_ICMP : протокол управления интернетомIPPROTO_IGMP : протокол управления интернет -группойIPPROTO_IPV4 : интернет -протокол версии 4IPPROTO_IPV6 : интернет -протокол версии 6 res : указатель на связанный список одной или нескольких struct addrinfo структур, которые содержат информацию о ответе о хосте.
Возвращаемое значение: При успехе ноль возвращается. При ошибке -1 возвращается, и errno устанавливается надлежащим образом.
struct addrinfo :
struct addrinfo {
int ai_flags; // input flags
int ai_family; // socket protocol family
int ai_socktype; // socket type
int ai_protocol; // protocol for socket
socklen_t ai_addrlen; // socket address length
struct sockaddr *ai_addr; // socket address
char * ai_canonname; // service name
struct addrinfo *ai_next; // next item in the list
}; int socket ( int domain, int type, int protocol);domain : Домен коммуникации, которая определяет семантику связи и семейство протоколов, которые будут использоваться. Следующие константы определены для аргумента domain :AF_INET : IPv4 Интернет -протоколыAF_INET6 : IPv6 Интернет -протоколыAF_UNIX : локальное общениеAF_UNSPEC : не указаноtype : Семантика общения. Следующие константы определены для аргумента type :SOCK_STREAM : обеспечивает секвенированные, надежные, двусторонние байтовые потоки, основанные на соединениях. Можно поддерживать механизм передачи данных вне полосы.SOCK_DGRAM : поддерживает Datagrams (без соединения, ненадежные сообщения фиксированной максимальной длины).SOCK_RAW : обеспечивает доступ к необработанному протоколу сети.SOCK_RDM : предоставляет надежный уровень Datagram, который не гарантирует заказа.SOCK_SEQPACKET : обеспечивает секвенированный слой пакета, который не гарантирует заказа.protocol : протокол, который будет использоваться в розетке. Обычно существует только один протокол для поддержки конкретного типа сокета в данном семействе протоколов, и в этом случае protocol может быть указан как 0. Для аргумента protocol определены следующие константы:IPPROTO_TCP : протокол управления передачейIPPROTO_UDP : протокол Datagram пользователяIPPROTO_SCTP : протокол передачи управления потокомIPPROTO_TIPC : прозрачная межпроцессная связьIPPROTO_RAW : Raw IP пакетыerrno устанавливается надлежащим образом. int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : дескриптор файла сокета должен быть связан.addr : указатель на структуру sockaddr , содержащую адрес, который должен быть связан с гнездом. Длина и формат адреса зависят от адреса семейства гнезда.addrlen : размер в байтах, структуры адреса, на которую указывает аргумент addr .errno устанавливается надлежащим образом. int listen ( int sockfd, int backlog);sockfd : дескриптор файла сокета, который будет слушать.backlog : максимальная длина, до которой может расти очереди ожидающих соединений для sockfd .errno устанавливается надлежащим образом. int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : дескриптор файла сокета, который будет принят.addr : указатель на структуру sockaddr . Эта структура заполнена адресом сокета сверстников, как известно слою связи. Точный формат возвращаемого адреса ADDR определяется семейством адресов сокета. Когда возвращаемый адрес слишком длинный, чтобы вписаться в поставляемую структуру sockaddr , адрес усечен.addrlen : указатель на объект socklen_t , который на входе указывает длину снабженной структуры sockaddr , а на выходе указывается длину хранимого адреса.errno устанавливается надлежащим образом. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : дескриптор файла сокета, который будет получен.buf : указатель на буфер, где следует хранить сообщение.len : Длина в байтах буфера, на который указал аргумент buf .flags : указывает тип приема сообщения. Значение формируется логически или более нулевым или более из следующих значений:MSG_OOB : обработка данных вне полости.MSG_PEEK : загляните в входящие сообщения.MSG_WAITALL : Подождите полного запроса, если только розетка не блокирует.MSG_DONTWAIT : включает операцию неблокировки; Если операция будет блокировать, вызов сбой с ошибкой EAGAIN или EWOULDBLOCK .MSG_NOSIGNAL : не генерируйте SIGPIPE , когда записываем трубку, в которой никто не читает.recv() возвращает 0. При ошибке -1 возвращается, и errno устанавливается соответствующим образом. ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : дескриптор файла сокета, который будет отправлен.buf : указатель на буфер, содержащий сообщение для отправки.len : Длина в байтах сообщения, на которые указывает аргумент buf .MSG_OOB : обработка данных вне полости.MSG_DONTROUTE : Обход маршрутизации, используйте прямой интерфейс.MSG_DONTWAIT : включает операцию неблокировки; Если операция будет блокировать, вызов сбой с ошибкой EAGAIN или EWOULDBLOCK .MSG_NOSIGNAL : не генерируйте SIGPIPE , когда записываем трубку, в которой никто не читает.errno устанавливается надлежащим образом. Общий
Http -запрос
Http -ответ
CGI
Стресс -тестирование