HTTP(HyperText Transfer Protocol)
웹에서 클라이언트(브라우저 e.g. 크롬, 사파리)와 서버가 통신할 때 사용하는 프로토콜(통신 규약)이다
HTTP란 웹에서 클라이언트(브라우저 e.g. 크롬, 사파리)와 서버가 통신할 때 사용하는 프로토콜(통신 규약)이다
쉽게 말해, 정보를 주고받는 방식을 정해둔 규칙이다
웹 애플리케이션은 HTTP를 사용해 클라이언트와 서버가 메시지를 주고받으면서 동작한다
브라우저의 가장 기본적인 기능은 HTTP 요청을 웹 서버에 전달하고, 웹 서버가 전송한 HTTP 응답을 처리하는 것
💡프로토콜이란? 통신에 참여한 주체들이 합의한 메시지의 형식
HTTP 메시지 구조
시작 줄(Start Line)에는 요청 시 메서드·URL·HTTP 버전, 응답 시 HTTP 버전·상태 코드·상태 메시지가 포함됨
헤더(Headers)에 중요한 메타데이터가 포함됨 Content-Type, User-Agent, Cookie 등
본문(Body)은 선택적인 부분으로, 실제 데이터가 포함됨. POST 요청의 폼 데이터나 응답의 HTML 내용 등이 여기에 해당함
HTTP의 특징
비연결성: 브라우저가 서버에 요청을 하면 연결 후 응답이 전송되고 바로 연결이 끊어짐
무상태: HTTP 프로토콜 자체는 요청 간의 연결을 유지하지 않기 때문에, 각 요청은 서로 독립적이다. 따라서 서버는 클라이언트의 상태를 알 수 없고, 매번 새로운 요청으로 간주한다. 즉, 서버가 클라이언트의 상태 정보를 유지하지 않음. 상태 정보를 유지해야 할 경우 쿠키나 세션을 이용해서 처리한다.
💡상태정보란? 클라이언트가 서버에 요청할 때 전달되는 정보
HTTP 요청 URL
브라우저에서 사용자가 버튼을 누르거나 하이퍼링크를 클릭하면 HTTP 요청 URL(Uniform Resource Locator)을 서버에 전달한다. 이 요청 URL은 요청과 관련된 다양한 정보들이 포함한다
예시 - Test 애플리케이션의 dir경로의 join.jsp 열기
http://localhost:8080/Test/dir/join.jsp
http: 서버에 파일을 요청할 때 사용한 프로토콜
localhost 웹 서버가 설치된 컴퓨터=호스트
8080 호스트 컴퓨터에서 사용하는 포트
Test/dir Test 애플리케이션의 디렉토리 경로 (명시하기 싫으면 server.xml에서 context path를 /로 변경하면 됨)
join.jsp 요청한 파일 (dir 디렉토리에 있음)
HTTP 요청의 핵심 요소
요청 방식(method):
클라이언트가 서버에 요청을 전달하는 방식으로 GET, POST, PUT, DELETE 등이 있음. 브라우저 요청 대부분은 GET 방식이다!
GET 요청 방식은 서버에 전달한 URI 뒤에 물음표+쿼리 문자열을 함께 전달함
e.g. /loginProcess?id=test&password=test
사용자가 입력한 정보가 쿼리 문자열로 외부에 노출되기 때문에 보안이 필요할 땐 사용하지 않는다
POST 요청 방식은 쿼리 문자열이 message-body에 포함되어 전달되기 때문에 브라우저 URI에 사용자 입력정보가 노출되지 않음
따라서 서버에 중요한 데이터를 전달하는 데 자주 사용된다. POST 방식은 HTML form 태그에서 method="POST" 속성을 사용해 전송할 수 있고, 자바스크립트의 XMLHttpRequest 또는 fetch API를 통해서도 요청 가능함
요청URI(Uniform Resource Identifier):
URL에서 포트번호 이후의 문자열에 해당한다 e.g. Test/dir/join.jsp
HTTP 응답
서버는 브라우저로부터 전송된 HTTP 요청으로부터 정보를 추출하여 요청을 처리하고, 결과를 HTTP 응답으로 생성해 브라우저로 전송한다
다음은 응답 프로토콜에 포함되는 상태 코드를 알아보겠다
상태코드는 브라우저 요청에 대한 처리 결과를 코드로 표현한 것이다
1xx(정보), 2xx(성공), 3xx(리다이렉션), 4xx(클라이언트 오류), 5xx(서버 오류)로 분류된다
대표적인 코드
상태코드 | 내용 |
200 | 요청이 정상적으로 처리됨 |
403 Forbidden | 브라우저가 요청한 파일에 접근할 수 없음 |
404 Not Found | 브라우저가 요청한 파일이 서버에 존재하지 않음 |
405 Method Not Allowed | 브라우저가 요청한 방식(method)을 서버에서 지원하지 않음 |
500 Internal Server Error | 브라우저가 요청한 기능을 서버가 처리하는 과정에서 예외(Exception)가 발생 |
프로토콜/버전
2023년 기준 대부분의 웹 트래픽은 HTTP/2와 HTTP/3이 차지하고 있다.
HTTP/2
출시: 2015년
특징: 여러 요청을 동시에 처리 가능, 데이터 압축으로 빠른 전송, 서버가 필요한 데이터를 미리 보내는 기능
HTTP/3
출시: 2022년
특징: 새로운 데이터 전송 방식으로 더 빠르고 안정적, 연결 시작 속도 개선, 보안 강화
++
HTTP랑 HTTPS 차이는 뭔데??
HTTPS(HyperText Transfer Protocol Secure)
HTTPS는 HTTP의 암호화된 버전으로, 클라이언트와 서버 간의 안전한 통신을 위해 보안 기능(SSL 또는 TLS)을 사용함
출처
https://datatracker.ietf.org/doc/html/rfc2616#section-10
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers
https://blog.cloudflare.com/http3-usage-one-year-on/
'Back-end' 카테고리의 다른 글
[Spring Boot] 스프링부트에서 JSTL 사용하기 (0) | 2024.10.11 |
---|---|
[Java] Servlet 서블릿과 톰캣 서버 이해하기 - 자바 웹 애플리케이션의 기초 (1) | 2024.10.02 |
MVC 패턴이란? - Model View Controller 디자인 패턴 알아보기 (0) | 2024.08.30 |
[Database] OracleDB 주요 SQL 정리 (0) | 2024.08.22 |
[Java] 변수의 기본형 타입 정리 - boolean, byte, short, char, int, float, long, double (1) | 2024.07.06 |