
클라이언트에서 서버로 요청(Requset)하고 서버는 요청을 읽어서 처리를 한 후에 결과를 응답(Response)하는 과정
1) 클라이언트와 서버 구조

2) 무상태 (Stateless)
3) 비연결 (Connectionless)
HTTP 지속연결
- 하나의 요청에 필요한 요청들이 모두 응답될 때까지 연결을 유지한다.
- 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적다. -> 속도가 빨라짐
HTTP Message는 요청 메세지, 응답 메세지 두 가지 종류가 있고 구조가 각각 다르다.
1) HTTP Message 구조

HTTP Method
GETpath
/event
HTTP Request가 전송되는 대상, 절대 경로(”/”로 시작하는 경로)
Query String(= Query Parameter) 에 해당하는 값도 포함한다.
HTTP Version
1.1
HTTP Version을 나타낸다.
field-name: OWS field-value OWS (OWS : 띄어쓰기 허용) 구조field-name은 대소문자 구분을 하지 않는다. 2) HTTP 요청 메세지(Request Message)

3) HTTP 응답 메세지(Response Message)

- HTTP Version
- Status Code
- 요청이 성공했는지, 실패했는지 나타내는 코드
- Status Text
- 코드와 함께 전달될 메세지
- Response에서만 사용되는 Header 값들이 따로 존재한다.
- 공백 한줄, 필수값
- 실제 전송하는 데이터가 담겨 있는 부분
- 만약 전송할 데이터가 없다면, Body가 공백으로 존재한다.
클라이언트 - 서버 사이에 이루어지는 요청, 응답 데이터를 전송하는 방식을 뜻한다.
1) 주요 Method



기존 리소스가 존재하는 경우

- 리소스 전체 수정
2. 기존 리소스가 존재하고 일부만 변경하는 경우

- 기존 리소스가 존재하면 완전히 덮어쓰기가 된다.
기존 리소스가 없는 경우

- 리소스가 없으면 생성된다.

DELETE
- 리소스 삭제

-> CRUD 너무나도 중요하니 꼭 외우자
기타 Method (거의 사용을 안해서 위에 것이 더 중요)
- HEAD : GET에서 Message Body를 제외하고 상태 줄과 헤더만 반환한다.
HTTP Method는 안정성(Safe), 멱등성(Idempotent), 캐시가능성(Cacheable) 속성을 가지고 있다.

(Optional은 있을수도 있고, 없을수도 있다라는 말)
1) 안정성(Safe)
2) 멱등성(Idempotent) (- 계속 일관하다)

3) 캐시가능성 (Cachable)
캐시(Cache) : 클라이언트가 서버에 한번 요청했던 데이터에 대해서 요청할 때 마다 다시 전송할 필요가 없도록 웹 브라우저가 임시적으로 데이터를 보관하고 있는 장소.
GET, HEAD, POST 메소드는 캐시가 가능하기에 재사용을 위해 요청에 대한 응답을 저장할 수 있다.
일반적으로 GET, HEAD 정도만 캐시로 사용한다.
HTTP 요청에 대한 처리 상태를 응답하는 코드로 Data를 함께 응답한다.
Spring에서는 Response를 커스텀하여 의미있는 메세지를 만들어 사용하기도 한다.

1) HTTP Status Code (HTTP Response Message의 Start Line 안에 위치)
1xx (정보) : 요청 수신 후 처리중인 상태 (잘사용안함)
2xx (성공)
- 정상 처리 완료된 상태

- 대표 상태코드
- 200 OK : 요청 성공
- 201 Created : 새로운 리소스 생성
- 202 Accepted : 요청이 수신되었으나 처리가 완료되지 않음, 주로 Batch 처리에서 사용된다. (설정한 시간마다 반복적으로 동장하는 특성 작업)
- 204 No Content : 요청은 성공했지만, 응답 데이터가 없음
3xx (리다이렉션)
- 요청을 완료하려면 추가 행동이 필요한 상태




4xx (클라이언트 에러)
5xx (서버 에러)