HTTP(HyperText Transfer Protocol)
- RFC 2616에서 규정된 Web에서 데이터를 주고 받는 프로토콜(통신규약)
- 통신 규약: 컴퓨터끼리 데이터를 주고 받을 때 정해둔 약속
- 매우 범용적인 양식을 가지고 있어 전 세계에서 제일 널리 쓰임
- 이름에는 하이퍼텍스트 전송 프로토콜로 정의되어 있지만, 실제로는 HTML, XML, JSON, Image, Voice, Video, Javascript, PDF 등 다양한 컴퓨터에서 다룰 수 있는 것은 모두 전송 가능
- HTTP는 TCP를 기반으로 한 REST의 특징을 모두 구현하고 있는 Web기반의 프로토콜
HTTP 통신 방법
메세지를 주고(Request) 받는(Response) 형태의 통신 방법
- 브라우저는 서버에게 자신이 원하는 페이지(URL 등의 정보)를 요구(Request)한다.
- 서버는 브라우저가 원하는 페이지가 있는지 확인하고, 있다면 해당 페이지에 대한 데이터를 실어 응답(Response)해준다. 만약 없다면 없는 페이지에 대한 데이터를 반환한다.
- 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려준다.
- "데이터"는 어떠한 데이터든 주고 받는게 가능하다.
HTTP 구성 요소
Method (호출/요청 방식)
GET
: 리소스 취득✨
POST
: 리소스 생성, 추가✨
PUT
: 리소스 갱신, 생성✨
DELETE
: 리소스 삭제✨
PATCH
: 리소스의 일부분만 수정
HEAD
: 헤더 데이터 취득
OPTIONS
: 지원하는 메소드 취득
TRACE
: 요청메시지 반환
CONNECT
: 프록시 동작의 터널 접속으로 변경
- 브라우저가 어떤 페이지를 원하는지
- 요청 받은 페이지를 찾았는지
- 요청 받은 데이터를 성공적으로 찾았는지
- 어떤 형식으로 데이터를 보낼지
GET naver.com HTTP/1.1
이러한 사례 외에도 아주 다양한 의사 표현을 위한 데이터를 모두 Header 필드에 넣고 주고 받는다. 위에서 설명 된 메서드도 사실은 헤더에 포함되어 서버로 보내진다.
Payload (데이터, 실제 데이터)
- 서버가 응답을 보낼 때에나 클라이언트(브라우저)가 요청을 할때도 Payload를 보낼 수 있다.
- "GET method를 제외하곤 모두 Payload를 보낼 수 있다" 는게 HTTP에서의 약속
- HTML
<!DOCTYPE html>
<html>
<head><title>By @ResponseBody</title></head>
<body>Hello, Spring 정적 웹 페이지!!</body>
</html>
- JSON
{
"name":"Robbie",
"age": 20
}
- HTTP의 Payload를 통해 위와 같은 데이터들을 요청하고 응답 받을 수 있다.
Status Code
코드 | 의미 | 내용 |
---|
1XX | Information(처리중) | 처리중인 상태. 클라이언트는 요청을 계속하거나 서버의 지시에 따라서 재요청(최근 거의 사용 안함) |
2XX | Successful | 요청의 성공 |
3XX | Redirection | 다른 리소스로 리다이렉트. 해당 코드를 받았을 때는 Response의 새로운 주소로 재요청 |
4XX | Client Error | 클라이언트의 요청에 에러가 있는 상태. 재전송해도 에러가 해결되지 않음. |
5XX | Server Error | 서버 처리중 에러가 발생한 상태. 재전송시 에러가 해결되었을 수도 있음. |
자세한 코드는 따로 정리하도록 하쟈...