# HTTP **HTTP(HyperText Transfer Protocol)**는 웹에서 정보를 주고받기 위해 사용되는 기본적인 통신 규약입니다. 우리가 웹 브라우저를 통해 웹페이지를 보거나, 이미지를 다운로드하거나, 온라인 쇼핑을 할 때 모두 HTTP 프로토콜이 사용됩니다. ## HTTP 프로토콜의 역할 * 웹 페이지 요청: 사용자가 웹 브라우저의 주소창에 URL을 입력하면 브라우저는 해당 URL에 대한 HTTP 요청을 서버로 보냅니다. * 서버의 응답: 서버는 요청받은 내용을 처리하고, 요청된 웹 페이지의 HTML 코드, 이미지, CSS 파일 등을 포함하는 HTTP 응답을 브라우저로 보냅니다. * 브라우저의 렌더링: 브라우저는 받은 응답을 해석하여 우리가 보는 웹 페이지로 렌더링합니다. ## HTTP 프로토콜의 특징 * 클라이언트-서버 구조: HTTP는 클라이언트(브라우저)가 서버에 요청을 보내고, 서버가 응답하는 클라이언트-서버 구조를 기반으로 합니다. * 무상태(Stateless): 각 요청은 독립적이며, 서버는 이전 요청에 대한 정보를 저장하지 않습니다. * 비연결성(Connectionless): 한 번의 요청-응답이 이루어지면 연결이 끊어집니다. * 단순성: HTTP는 비교적 간단한 구조로 되어 있어 구현하기 쉽고, 다양한 플랫폼에서 사용될 수 있습니다. ## HTTP 메서드 HTTP 메서드는 클라이언트가 서버에 요청하는 작업의 종류를 나타냅니다. 주요 HTTP 메서드는 다음과 같습니다. * GET: 특정 자원을 요청합니다. (예: 웹 페이지 조회) * POST: 서버에 새로운 데이터를 전송합니다. (예: 회원 가입, 게시글 작성) * PUT: 특정 자원을 업데이트합니다. * DELETE: 특정 자원을 삭제합니다. ## HTTP 상태 코드 HTTP 상태 코드는 서버가 클라이언트의 요청에 대해 어떻게 처리했는지를 나타내는 숫자 코드입니다. * 200 OK: 요청이 성공적으로 처리되었습니다. * 404 Not Found: 요청한 자원이 없습니다. * 500 Internal Server Error: 서버에서 오류가 발생했습니다. ## HTTP와 HTTPS의 차이점 * HTTP: 일반적인 HTTP는 데이터를 암호화하지 않기 때문에 통신 내용이 도청될 위험이 있습니다. * HTTPS: HTTPS는 HTTP에 SSL/TLS 암호화를 추가하여 데이터를 안전하게 보호합니다. 따라서 개인정보나 금융 정보를 다루는 웹사이트에서는 HTTPS를 사용하는 것이 필수적입니다. ## HTTP 버전 HTTP는 지속적으로 발전하고 있으며, 현재 주로 사용되는 버전은 HTTP/1.1과 HTTP/2입니다. HTTP/2는 HTTP/1.1보다 더 빠르고 효율적인 통신을 지원합니다. ## HTTP 요청 (HTTP Request) 클라이언트가 서버에 보내는 메시지를 의미합니다. 요청에는 요청 메서드, 요청 URL, 헤더, 본문 등이 포함됩니다. * 요청 메서드: 수행하고자 하는 작업을 나타냅니다. (GET, POST, PUT, DELETE 등) * 요청 URL: 요청하려는 자원의 위치를 나타냅니다. * 헤더: 추가적인 정보를 제공합니다. (User-Agent, Accept 등) * 본문: 서버로 전송할 데이터 (POST 메서드에서 주로 사용) ``` GET /products HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ``` ## HTTP 응답 ( HTTP Response) 서버가 클라이언트에게 보내는 메시지를 의미합니다. 응답에는 상태 코드, 헤더, 본문 등이 포함됩니다. * 상태 코드: 요청 처리 결과를 나타냅니다. (200 OK, 404 Not Found 등) * 헤더: 추가적인 정보를 제공합니다. (Content-Type, Content-Length 등) * 본문: 요청한 데이터 ``` HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 1234 제품 목록 ```