
HTTP는 클라이언트(웹 브라우저)와 서버(웹 서버) 간의 통신을 기반으로 한다. 클라이언트는 웹 페이지를 요청하고, 서버는 요청된 페이지를 전송하여 응답한다.
HTTP 통신은 요청(request)과 응답(response) 의 두 부분으로 구성됩니다. 클라이언트가 서버에게 요청을 보내면, 서버는 그에 대한 응답을 반환한다. 요청과 응답은 텍스트 형식으로 구성되며, 주로 HTML, CSS, JavaScript, 이미지, 동영상 등의 웹 리소스를 주고받을 때 사용된다.
서버가 클라이언트에 응답할 때, 상태 코드를 함께 보낸다. 상태 코드는 요청의 성공 여부나 실패 원인을 나타내며, 가장 잘 알려진 상태 코드 중 하나는 200(OK)이다. 다른 상태 코드로는 404(Not Found), 500(Internal Server Error) 등이 있다.
HTTP 요청은 다양한 메서드를 사용하여 원하는 작업을 지정한다. 가장 일반적인 메서드로는 GET(데이터를 가져옴), POST(데이터를 전송), PUT(데이터를 업데이트), DELETE(데이터를 삭제) 가 있다.
HTTP 요청은 URL을 사용하여 요청 대상을 지정한다. URL은 프로토콜(예: "http://"), 호스트(웹 서버의 주소), 포트 번호, 경로 등의 정보를 포함한다.
HTTP는 기본적으로 보안성이 낮으며, 데이터의 암호화가 이루어지지 않는다. 이로 인해 중요한 정보를 주고받을 때 보안 문제가 발생할 수 있으므로, HTTPS(HTTP Secure)라는 보안 버전이 사용된다. HTTPS는 데이터를 암호화하여 더 안전한 통신을 제공한다.
클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징이다. 연결을 유지하게 되면 서버에 많은 부담을 줄 수 있기 때문에 상당히 많은 클라이언트에게 요청을 받는 웹 서버의 경우 응답을 처리했으면 연결을 끊는다. 이로 인해 서버의 부담을 줄일 수 있지만, 리소스를 요청할 때마다 연결해야 하는 오버헤드 비용이 발생한다. 이를 해결하기 위해선, 요청 헤더의 Connection: keep-alive 속성으로 지속적 연결 상태(Persistent connection)를 유지할 수 있다. 즉, 요청을 할 때마다 연결하지 않고 기존의 연결을 재사용하는 방식이다. HTTP 1.1 부턴 지속적 연결 상태가 기본이며 이를 해제하기 위해선 명시적으로 요청 헤더를 수정해야 한다.
각각의 요청이 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않는다. 즉, 각 클라이언트에 맞게 리소스를 응답하는 것은 불가능하다. 이를 해결하기 위해, 쿠키나 세션 또는 토큰 방식의 OAuth 및 JWT가 사용된다.