HTTP (Hyper Text Transfer Protocol)
웹에서 클라이언트(브라우저)와 서버 간에 데이터를 주고받기 위한 프로토콜.
인터넷을 통해 다양한 웹 리소스를 전송할 수 있다.
비연결형이며 상태를 유지하지 않고, 요청과 응답에 의해 통신이 이루어진다.
특징
- 비연결성 : 클라이언트와 서버는 요청, 응답이 완료되면 연결을 끊는다. 각 요청은 독립적이면 이전 요청의 정보는 다음 요청에 전달되지 않는다.
- Stateless : 서버는 요청 간 클라이언트의 상태를 저장하지 않는다. 따라서 클라이언트가 이전에 어떤 페이지를 접근했는지 알 수 없다.
이것을 보완하기 위해 쿠키, 세션 등을 사용하여 상태를 유지할 수 있다. - 요청-응답 구조 : 클라이언트가 서버에 요청을 보내면 서버는 응답을 반환한다.
요청과 응답은 헤더와 본문으로 구성된다. - 텍스트 기반 : 사람이 읽을 수 있는 형식으로 데이터를 전송한다.
요청과 응답 메시지는 텍스트로 작성되며, 클라이언트와 서버는 이를 파싱하고 해석한다.
구조
요청
-
요청 라인: HTTP 메소드, 요청 URL, HTTP 버전으로 구성된다. 예: GET /index.html HTTP/1.1
-
헤더(Header): 요청에 대한 부가 정보를 제공하며, 클라이언트와 서버가 어떤 형식으로 데이터를 주고받을지 정의한. 예: Host: www.example.com, User-Agent: Mozilla/5.0
-
본문(Body): 선택적이며, 주로 POST, PUT 요청에서 서버로 전송할 데이터를 포함합니다. 예를 들어, 사용자 폼 데이터가 본문에 포함될 수 있습니다.
응답
-
상태 라인 HTTP 버전, 상태 코드, 상태 메시지로 구성됩니다. 예: HTTP/1.1 200 OK
-
헤더(Header): 응답에 대한 메타데이터를 포함합니다. 예를 들어, Content-Type: text/html은 서버가 HTML 데이터를 반환한다는 것을 의미합니다.
-
본문(Body): 서버가 클라이언트에게 전송하는 실제 데이터(HTML 문서, 이미지 등)가 들어 있습니다.
HTTP 메서드
클라이언트가 서버에 요청할 때 어떤 동작을 할지 정의한다.
1. GET
서버에서 리소스를 요청할 때 사용한다. 주로 데이터를 조회한다.
2. POST
서버에 데이터를 전송할 때 사용한다. 폼 데이터를 전송하거나 파일을 업로드할 때 사용한다.
3. PUT
서버에 리소스를 생성하거나 수정할 때 사용한다. 전달된 데이터를 통해 기존 데이터를 대체한다.
4. DELETE
서버에서 리소스를 삭제할 때 사용한다.
5. PATCH
리소스의 일부를 수정할 때 사용한다.
PUT과 다르게 전체 리소스를 교체하지 않고, 일부만 업데이트한다.
HTTP Status Code
1xx (정보) : 요청이 수신되었으며 처리가 진행 중임을 표시
2xx (성공)
- 200 OK: 서버가 요청을 제대로 처리함
- 201 Created: 요청이 성공했으며, 새로운 리소스가 생성됨
- 202 Accepted: 요청이 수락되었지만, 처리가 완료되지 않음
- 204 No Content: 요청이 처리되었지만, 반환할 콘텐츠가 없음
3xx (리다이렉션)
- 301 Moved Permanently: 요청한 리소스가 영구적으로 다른 URI로 이동했음. 클라이언트는 이후부터 새로운 URI를 사용해야 함.
- 302 Found: 요청한 리소스가 임시로 다른 URI에 위치함, 클라이언트는 이후에 원래 URI를 사용할 수 있음.
4xx (클라이언트 오류)
- 400 Bad Request: 잘못된 요청으로 서버가 요청을 처리할 수 없음
- 401 Unauthorized: 인증을 필요로 하는 요청, 인증 실패
- 403 Forbidden: 서버가 요청을 이해했으나, 권한이 없기 때문에 요청을 거부함
- 404 Not Found: 요청한 리소스를 찾을 수 없음
- 405 Method Not Allowed: 클라이언트가 요청한 메소드는 허용되지 않음
- 409 Conflict: 요청이 서버의 상태와 충돌할 때 발생.
- 429 Too Many Requests: 클라이언트가 너무 많은 요청을 짧은 시간 내에 보냈을 때 발생.
5xx (서버 오류)
- 500 Internal Server Error: 서버에서 요청을 처리하는 도중 예기치 못한 오류가 발생함
- 502 Bad Gateway: 서버가 게이트웨이 또는 프록시 역할을 하는 경우, 상위 서버로부터 잘못된 응답을 받은 경우
- 504 Gateway Timeout: 서버가 상위 서버로부터 응답을 기다리는 중 시간 초과가 발생했을 때
HTTPS
HTTP는 기본적으로 데이터를 암호화하지 않은 평문으로 전송한다. 따라서 중간에 누군가 네트워크 트래픽을 가로챌 경우 민감한 정보(로그인 정보, 개인정보 등)가 유출될 수 있다.
이를 방지하기 위해 HTTPS(HTTP Secure)가 도입되었다.
HTTPS는 SSL/TLS 프로토콜을 통해 데이터를 암호화하여 전송한다.
HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가하며, 이를 통해 데이터의 기밀성과 무결성을 보장할 수 있다.