HTTP
HTTP 프로토콜이라고도 한다. 사실 HTTP에 P가 프로토콜의 약자라 HTTP 프로토콜이라 하면 동어 반복이라 명확히는 HTTP라 하는게 맞긴 하다.
HTTP는 웹에서 데이터를 주고받는 프로토콜로, 서버와 클라이언트 간 통신 규칙을 정의한다. 일반적으로 웹 서버와 크롬, 엣지 등 웹 브라우저 간 요청(request)과 응답(response)을 처리하는 역할을 한다. 또한, HTTP의 기본 포트는 80번을 사용한다.
서버와 클라이언트의 연결이 지속되지 않는 비연결식이기에 클라이언트와 서버 간 최대 연결 수보다 많은 요청과 응답을 처리할 수 있고, 따라서 불특정 다수에게 서비스하는 경우에 적합하다. 그러나 다른 한편으로는 HTTP는 무상태(stateless) 프로토콜이므로 요청과 응답이 끝나면 연결이 종료된다. 이 때문에 클라이언트의 이전 상태를 유지할 수 없지만, 이를 보완하기 위해 쿠키(cookie), 세션(session), JWT(json web token) 등의 기술을 활용한다.
요청 및 응답
클라이언트는 서버에 데이터를 요청할 때 HTTP 요청 메시지를 보낸다. 요청 메시지는 예를 들어 다음과 같다.
GET /index.html HTTP/1.1
Host: dreamofelectricsheep.tistory.com
User-Agent: Mozilla/5.0
Accept-Language: ko-KR
여기서 가장 첫 줄 GET /index.html HTTP/1.1
은 요청 메서드, URL 경로, HTTP 버전 정보가 들어있는 요청 라인이다. 여기서 GET
은 요청 메서드이고, /index.html
은 요청할 자원의 URL 경로, HTTP/1.1
은 HTTP 버전이 1.1 이라는 뜻이다.
두번째 줄부터는 헤더(headers)로 key:value
형식으로 이루어져 있으며 앞선 예시 외에도 다양한 헤더를 포함시킬 수 있다. 위 예시에서는 요청하는 서버의 도메인인 호스트(Host
)와 클라이언트 정보인 User-Agent
, 클라이언트가 선호하는 언어인 Accept-Language
를 설정하였다.
그 이후 전송해야할 정보가 있다면, 즉 요청 메드로 POST
, PUT
등을 사용한다면 본문을 첨부하면 된다.
그렇다면 이제 서버는 클라이언트의 요청에 응답한다. 응답 메시지를 예를 들어 다음과 같다.
HTTP/1.1 200 OK
Date: Wed, 23 Feb 2025 14:28:02 GMT
Server: Apache
Content-Type: text/html
<html>
...
</html>
여기서 가장 첫 줄은 HTTP 버전, 상태 코드이다. HTTP/1.1
이기에 버전이 1.1이라는 뜻이고, 200 OK
는 요청이 성공적으로 처리되었음을 나타낸다.
두번째 줄부터는 헤더(headers)로 앞선 요청과 마찬가지로 key:value
형식으로 이루어져 있으며 클라이언트가 필요로하는 정보를 제공한다.
마지막으로 보이는 <html> ... </html>
부분은 브라우저가 요청한 데이터로, 이 예시에서는 HTML 데이터를 제공하고 있다.
요청 메서드
메서드 | 의미 |
GET |
데이터를 요청 |
POST |
서버에 데이터를 제출 |
PUT |
서버에 데이터를 저장 또는 업데이트 |
DELETE |
서버에서 데이터를 삭제 |
HEAD |
GET과 같지만, 헤더만 요청 (본문 없음) |
OPTIONS |
서버가 지원하는 요청 메서드 목록을 요청 |
PATCH |
서버의 데이터 일부를 수정 |
TRACE |
서버가 받은 요청을 그대로 반환 |
CONNECT |
특정 프록시 서버와의 연결 요청 |
주요 상태 코드
상태 코드 | 의미 |
200 OK |
요청이 성공적으로 처리됨 |
301 Moved Permanently |
요청한 리소스가 다른 URL로 영구 이동 |
400 Bad Request |
요청이 잘못됨 (클라이언트 오류) |
401 Unauthorized |
인증이 필요함 |
403 Forbidden |
접근 권한 없음 |
404 Not Found |
요청한 페이지가 존재하지 않음 |
500 Internal Server Error |
서버 내부 오류 발생 |
'Web Programing > Web' 카테고리의 다른 글
[Web] 웹 서버(web server)와 WAS(web application server) (0) | 2025.03.04 |
---|