
프로젝트는 1337 Khouribga Coding School에서 개발되었습니다.
저자 : @jamiafathiya & @achrafelkhnissi & @abellaismail7
HTTP는 하이퍼 텍스트 전송 프로토콜을 나타냅니다.이 프로토콜은 하이퍼 텍스트 전송에 사용되는 프로토콜입니다. 이것은 두 가지 질문을 제기합니다. 프로토콜이란 무엇이며 하이퍼 텍스트는 무엇입니까? 이러한 맥락에서 프로토콜은 컴퓨터와 같은 다른 엔티티 간의 정보를 통신 할 수있는 규칙 시스템입니다. HyperText는 다른 텍스트, 즉 웹 문서에 대한 하이퍼 링크가 포함 된 컴퓨터 화면에 표시된 텍스트에 대한 구식 용어입니다. 따라서 하이퍼 텍스트 전송 프로토콜은 웹 문서를 앞뒤로 전송하는 데 사용되는 일련의 규칙, 서버 및 브라우저를 나타냅니다.
HTTP는 세션을 허용하고, 저장된 상태는 브라우저와 서버간에 공유됩니다. 방문자가 사진 갤러리를 탐색하는 경우 브라우저와 서버는 쿠키 형태로 정보를 앞뒤로 전달하여 방문자의 위치에 대한 정보를 순서대로 교환 할 수 있습니다. 페이지가 다시로드되면 브라우저는 쿠키를 서버로 보내서 방문한 마지막 위치를 나타내는 서버로 보냅니다. 이것은 HTTP가 무국적이지만 세션이 없다는 것을 의미합니다.
| 용어 | 정의 |
|---|---|
| 브라우저 | HTML 문서간에 액세스하고 탐색하는 데 사용되는 응용 프로그램. |
| 사용자 에이전트 | 사용자를 대신하여 작용하는 응용 프로그램, 일반적으로 브라우저. |
| TCP | 월드 와이드 웹, 이메일, FTP 및 원격 관리가 사용하는 주요 인터넷 프로토콜 중 하나 인 전송 제어 프로토콜이 짧습니다. |
| IP | 인터넷 프로토콜의 짧음. IP는 네트워크를 통해 컴퓨터간에 데이터를 전송하는 데 사용됩니다. 인터넷에 연결된 모든 장치에는 IP 주소가 있습니다. |
| URL | 균일 한 리소스 로케이터는 웹의 리소스를 가리키는 주소입니다. |
| DNS | 도메인 이름 서버의 경우 짧습니다. DNS는 모든 도메인 이름 URL을 카탈로그하고 서버의 IP 주소를 가리 킵니다. |
| 의지 | URL을 따를 때 서버에서 사용 가능한 파일 또는 파일. |
| 섬기는 사람 | 인터넷의 컴퓨터는 일부 형태의 데이터 저장 및 공유 응용 프로그램, 가장 일반적으로 웹 서버 응용 프로그램을 실행하는 컴퓨터입니다. |
| 대리 | 클라이언트와 서버 간의 중간 사람 역할을하는 소프트웨어 또는 하드웨어 서비스. |
| 요청-응답 쌍 | 클라이언트와 서버는 요청-응답 쌍을 사용하여 HTTP를 통해 통신합니다. 요청이 전송되고 응답이 반환됩니다. |
| 헤더 | 요청 및 응답은 HTTP 헤더를 사용하여 정보를 앞뒤로 전달합니다. |
| HTTP 요청 방법/동사 | 모든 HTTP 요청에는 동사라고도하는 메소드가 포함되어 있으며 발신자가 리소스에서 수행하려는 조치 (예 : Get, Get, Put, Delete)를 설명합니다. |
| 상태 응답 코드 | 서버가 클라이언트에게 보낸 응답 유형을 설명하는 100 ~ 500 범위의 숫자 코드. |
| 은닉처 | 성능 속도를 높이기 위해 클라이언트 또는 서버에 데이터를 저장하는 방법. |
| 무국적 | HTTP는 상태가없는 상태입니다. 즉, 모든 요청과 응답은 고유하며 상태가 저장되지 않습니다. |
| 매력적인 여자 | 클라이언트와 서버간에 전달 된 데이터 문자열은 상태가 많은 세션을 만듭니다. |
| 세션 | 클라이언트와 서버는 정보를 전달하여 세션을 만들어 상태에 대한 정보를 공유 할 수 있습니다. |


| 방법 | 설명 | 성공 | 실패 |
|---|---|---|---|
| 얻다 | 사용 가능한 경우 지정된 리소스를 받으십시오 | 200 OK | 404 찾을 수 없습니다 |
| 우편 | 새 리소스를 만들고 컬렉션에 추가하십시오. | 201 생성 | 401 무단, 409 갈등, 404 발견되지 않았습니다 |
| 놓다 | 기존 싱글 톤 리소스 기반 또는 ID를 업데이트하십시오 | 200 OK | 401 무단, 404는 찾을 수 없으며 405 방법은 허용되지 않습니다 |
| 반점 | 기존 싱글 톤 리소스 기반 또는 ID를 수정하십시오 | 200 OK | 401 무단, 404는 찾을 수 없으며 405 방법은 허용되지 않습니다 |
| 삭제 | 싱글 톤 리소스 기반 또는 ID 삭제 (리소스 모음을 삭제할 수 없음) | 200 OK | 401 무단, 404 발견되지 않았습니다 |
| 옵션 | 이 리소스에서 옵션을 사용할 수 있습니다 | 200 OK | - |
| 머리 | 리소스에서 응답 헤더 만 가져 오십시오 | 200 OK | 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 : res 가 지적한 목록에 반환 된 소켓 주소 구조를 선택하기위한 기준을 지정하는 struct addrinfo 에 대한 포인터.
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 : 데이터 그램을 지원합니다 (고정 최대 길이의 연결이없고 신뢰할 수없는 메시지).SOCK_RAW : 원시 네트워크 프로토콜 액세스를 제공합니다.SOCK_RDM : 순서를 보장하지 않는 신뢰할 수있는 데이터 그램 레이어를 제공합니다.SOCK_SEQPACKET : 순서를 보장하지 않는 시퀀싱 된 패킷 레이어를 제공합니다.ai_protocol : 소켓의 프로토콜. 다음 상수는 ai_protocol 필드에 대해 정의됩니다.IPPROTO_TCP : 전송 제어 프로토콜IPPROTO_UDP : 사용자 데이터 그램 프로토콜IPPROTO_RAW : 원시 프로토콜 인터페이스IPPROTO_IP : 인터넷 프로토콜IPPROTO_ICMP : 인터넷 제어 메시지 프로토콜IPPROTO_IGMP : 인터넷 그룹 관리 프로토콜IPPROTO_IPV4 : 인터넷 프로토콜 버전 4IPPROTO_IPV6 : 인터넷 프로토콜 버전 6 res : 호스트에 대한 응답 정보를 포함하는 하나 이상의 struct addrinfo 구조의 링크 된 목록에 대한 포인터.
반환 값 : 성공시 0이 반환됩니다. 오류가 발생하면 -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 : 데이터 그램을 지원합니다 (고정 최대 길이의 연결이없고 신뢰할 수없는 메시지).SOCK_RAW : 원시 네트워크 프로토콜 액세스를 제공합니다.SOCK_RDM : 순서를 보장하지 않는 신뢰할 수있는 데이터 그램 레이어를 제공합니다.SOCK_SEQPACKET : 순서를 보장하지 않는 시퀀싱 된 패킷 레이어를 제공합니다.protocol : 소켓과 함께 사용할 프로토콜. 일반적으로 주어진 프로토콜 패밀리 내의 특정 소켓 유형을 지원하기위한 단일 프로토콜 만 존재하며,이 경우 protocol 0으로 지정 될 수 있습니다. 다음 상수는 protocol 인수에 대해 정의됩니다.IPPROTO_TCP : 전송 제어 프로토콜IPPROTO_UDP : 사용자 데이터 그램 프로토콜IPPROTO_SCTP : 스트림 제어 전송 프로토콜IPPROTO_TIPC : 투명한 프로세스 간 통신IPPROTO_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 : 입력에서 제공된 sockaddr 구조의 길이를 지정하고 출력에 저장된 주소의 길이를 지정하는 socklen_t 객체에 대한 포인터.errno 적절하게 설정됩니다. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : 수신 할 소켓의 파일 디스크립터.buf : 메시지를 저장 해야하는 버퍼에 대한 포인터.len : 버퍼의 바이트 길이는 buf 인수를 가리 킵니다.flags : 메시지 수신 유형을 지정합니다. 값은 논리적으로 또는 다음 값 중 0 이상으로 형성됩니다.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
스트레스 테스트