1. HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
2. 클라이언트 서버 구조
- Request, Response 구조
- 클라이언트는 서버에 요청(Request)을 보내고, 응답을 대기
- 서버가 요청에 대한 결과(Response)를 만들어서 응답
3. 무상태 프로토콜 (Stateless)
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 장점: 서버 확장성 높음(스케일 아웃) -> 서버가 클라이언트의 상태를 보존하지 않으므로 각 요청을 다른 서버가 응답을 처리할 수 있음. 따라서 무한한 서버 증설이 가능하다.
- 단점: 클라이언트가 추가 데이터 전송
4. 비연결성
- HTTP는 기본적으로 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 수천명이 서비스를 이용하더라도 실제 서버에서 처리하는 요청을 수십개
- 모든 유저가 버튼을 누르고 있지 않는다.
- 서버 자원을 매우 효율적으로 사용할 수 있음
2. HTTP 메소드
리소스와 행위를 분리 - 가장 중요한 것은 리소스를 식별하는 것
- URI는 리소스만 식별 (Uniform Resource Identifier)
- 리소스와 해당 리소스를 대상으로 하는 행위를 분리
1. 메소드 종류
- GET: 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스를 대체, 해당 리로스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
GET
- query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
POST
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
- 스펙: POST 메소드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청합니다.
- 이 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야함 -> 정해진 것이 없다.
정리
- 새 리소스 생성(등록) : 서버가 아직 식별하지 않는 새 리소스 생성
- 요청 데이터 처리 : 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
- 다른 메서드로 처리하기 애매한 경우 : 애매하면 POST 사용
PUT
- 리소스를 대체 : 있으면 대체, 없으면 생성 -> 덮어버림
PATCH
- 리소스 부분 변경
DELETE
- 리소스 제거
3. HTTP 상태코드
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
리다이렉션
- 웹 브라우저는 3XX 응답의 결과에 Location헤더가 있으면, Location위치로 자동 이동(리다이렉트)
영구 리다이렉션 - 301, 308
- 리소스의 URI가 영구적으로 이동
- 원래의 URL 사용 X, 검색 엔진 등에서도 변경 인지
- 301 Moved Permanently
- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
- 308 Permanent Redirect
- 301과 기능 동일
- 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST)
일시적인 리다이렉션 - 302, 307, 303
- 리소스의 URI가 일시적으로 변경
- 따라서 검색 엔진 등에서 URL을 변경하면 안됨
- 302 Found
- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
- 307 Temporary Redirect
- 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)
- 303 See Other
- 리다이렉트시 요청 메서드가 GET으로 변경
PRG: Post/Redirect/Get
- POST로 주문,등록 후에 새로고침 하면 재요청이 되어 중복 주문이 가능
- POST로 주문 후에 결과 화면을 GET 메서드로 리다이렉트
- 새로고침해도 결과화면을 GET으로 조회
4. HTTP 헤더
- header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
- field-name은 대소문자 구분 없음
HTTP BODY
- 메시지 본문(message body)를 통해 데이터 전달
- 메시지 본문 = 페이로드(payload)
- 표현은 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
표현
- Content-Type: 표현 데이터 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어
- Content-Length: 표현 데이터의 길이
- 표현 헤더는 전송, 응답 둘다 사용
협상 : 클라이언트가 선호하는 표현 요청
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
- 협상 헤더는 요청시에만 사용
협상과 우선순위
- Quality Values(q) 값 사용
- 0~1, 클수록 우선순위 생략하면 1
- Accept-Language: ko-KR;ko;q=0.9,en-US;q=0.8;en;q=0.7
- 1. ko-KR(생략:1)
- 2. ko;q=0.9
- en-US;q=0.8
- en;q=0.7
- 구체적인 것을 우선한다.
- Accept: text/*, text/plain, text/plain;format=flowed, */*
- 1. text/plain;format=flowed
- 2. text
- 3. text/*
- 4. */*
일반 정보
- From : 유저 에이전트의 이메일 정보
- Referer: 이전 웹 페이지 주소
- 현재 요청된 페이지의 이전 웹 페이지 주소
- Referer을 사용해서 유입 경로 분석 가능
- 요청에서 사용
- User-Agent
- 클라이언트의 애플리케이션 정보(웹 브라우저 정보, 등등)
- 통계 정보
- 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
- 요청에서 사용
- Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
- 응답에서 사용
- Date: 메시지가 발생한 날짜와 시간
- 응답에서 사용
특별한 정보
Host: 요청한 호스트 정보(도메인)
- 요청에서 사용
- 필수
- 하나의 서버가 여러 도메인을 처리해야할 때
- 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
Location: 페이지 리다이렉션
- 웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
- 201 (Created) : Location 값 요청에 의해 생성된 리소스 URI
- 3xx (Redirection) Location 값 요청을 자동으로 리다이렉션 하기 위한 대상 리소스를 가리킴
Allow: 허용 가능한 HTTP 메서드
- 405 (Method Not Allowed) 에서 응답에 포함해야함
Retry-After
- 503(Service Unavailalbe): 서비스가 언제까지 불가능인지 알려줄 수 있음
- 날짜표기 / 초 단위 표기
참조
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
1. HTTP 특징
- 클라이언트 서버 구조
- 무상태 프로토콜(Stateless), 비연결성
- HTTP 메시지
- 단순함, 확장 가능
2. 클라이언트 서버 구조
- Request, Response 구조
- 클라이언트는 서버에 요청(Request)을 보내고, 응답을 대기
- 서버가 요청에 대한 결과(Response)를 만들어서 응답
3. 무상태 프로토콜 (Stateless)
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 장점: 서버 확장성 높음(스케일 아웃) -> 서버가 클라이언트의 상태를 보존하지 않으므로 각 요청을 다른 서버가 응답을 처리할 수 있음. 따라서 무한한 서버 증설이 가능하다.
- 단점: 클라이언트가 추가 데이터 전송
4. 비연결성
- HTTP는 기본적으로 연결을 유지하지 않는 모델
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 수천명이 서비스를 이용하더라도 실제 서버에서 처리하는 요청을 수십개
- 모든 유저가 버튼을 누르고 있지 않는다.
- 서버 자원을 매우 효율적으로 사용할 수 있음
2. HTTP 메소드
리소스와 행위를 분리 - 가장 중요한 것은 리소스를 식별하는 것
- URI는 리소스만 식별 (Uniform Resource Identifier)
- 리소스와 해당 리소스를 대상으로 하는 행위를 분리
1. 메소드 종류
- GET: 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스를 대체, 해당 리로스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
GET
- query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
POST
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
- 스펙: POST 메소드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청합니다.
- 이 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야함 -> 정해진 것이 없다.
정리
- 새 리소스 생성(등록) : 서버가 아직 식별하지 않는 새 리소스 생성
- 요청 데이터 처리 : 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
- 다른 메서드로 처리하기 애매한 경우 : 애매하면 POST 사용
PUT
- 리소스를 대체 : 있으면 대체, 없으면 생성 -> 덮어버림
PATCH
- 리소스 부분 변경
DELETE
- 리소스 제거
3. HTTP 상태코드
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
리다이렉션
- 웹 브라우저는 3XX 응답의 결과에 Location헤더가 있으면, Location위치로 자동 이동(리다이렉트)
영구 리다이렉션 - 301, 308
- 리소스의 URI가 영구적으로 이동
- 원래의 URL 사용 X, 검색 엔진 등에서도 변경 인지
- 301 Moved Permanently
- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
- 308 Permanent Redirect
- 301과 기능 동일
- 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST)
일시적인 리다이렉션 - 302, 307, 303
- 리소스의 URI가 일시적으로 변경
- 따라서 검색 엔진 등에서 URL을 변경하면 안됨
- 302 Found
- 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
- 307 Temporary Redirect
- 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)
- 303 See Other
- 리다이렉트시 요청 메서드가 GET으로 변경
PRG: Post/Redirect/Get
- POST로 주문,등록 후에 새로고침 하면 재요청이 되어 중복 주문이 가능
- POST로 주문 후에 결과 화면을 GET 메서드로 리다이렉트
- 새로고침해도 결과화면을 GET으로 조회
4. HTTP 헤더
- header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
- field-name은 대소문자 구분 없음
HTTP BODY
- 메시지 본문(message body)를 통해 데이터 전달
- 메시지 본문 = 페이로드(payload)
- 표현은 요청이나 응답에서 전달할 실제 데이터
- 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공
표현
- Content-Type: 표현 데이터 형식
- Content-Encoding: 표현 데이터의 압축 방식
- Content-Language: 표현 데이터의 자연 언어
- Content-Length: 표현 데이터의 길이
- 표현 헤더는 전송, 응답 둘다 사용
협상 : 클라이언트가 선호하는 표현 요청
- Accept: 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset: 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
- Accept-Language: 클라이언트가 선호하는 자연 언어
- 협상 헤더는 요청시에만 사용
협상과 우선순위
- Quality Values(q) 값 사용
- 0~1, 클수록 우선순위 생략하면 1
- Accept-Language: ko-KR;ko;q=0.9,en-US;q=0.8;en;q=0.7
- 1. ko-KR(생략:1)
- 2. ko;q=0.9
- en-US;q=0.8
- en;q=0.7
- 구체적인 것을 우선한다.
- Accept: text/*, text/plain, text/plain;format=flowed, */*
- 1. text/plain;format=flowed
- 2. text
- 3. text/*
- 4. */*
일반 정보
- From : 유저 에이전트의 이메일 정보
- Referer: 이전 웹 페이지 주소
- 현재 요청된 페이지의 이전 웹 페이지 주소
- Referer을 사용해서 유입 경로 분석 가능
- 요청에서 사용
- User-Agent
- 클라이언트의 애플리케이션 정보(웹 브라우저 정보, 등등)
- 통계 정보
- 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
- 요청에서 사용
- Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
- 응답에서 사용
- Date: 메시지가 발생한 날짜와 시간
- 응답에서 사용
특별한 정보
Host: 요청한 호스트 정보(도메인)
- 요청에서 사용
- 필수
- 하나의 서버가 여러 도메인을 처리해야할 때
- 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
Location: 페이지 리다이렉션
- 웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
- 201 (Created) : Location 값 요청에 의해 생성된 리소스 URI
- 3xx (Redirection) Location 값 요청을 자동으로 리다이렉션 하기 위한 대상 리소스를 가리킴
Allow: 허용 가능한 HTTP 메서드
- 405 (Method Not Allowed) 에서 응답에 포함해야함
Retry-After
- 503(Service Unavailalbe): 서비스가 언제까지 불가능인지 알려줄 수 있음
- 날짜표기 / 초 단위 표기
참조
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC