HTTP 상태 코드
클라이언트가 보낸 요청의 처리 상태를 응답 메시지로 돌려준다. 이 상태 코드를 통해서 서버의 상황을 추측할 수 있다.
1xx(informational)
요청이 수신되어 처리 중 (거의 사용하지 않는다)
2xx(Successful)
클라이언트의 요청을 성공적으로 처리
- 200 OK : 클라이언트의 요청이 성공적으로 응답됐을 때
- 201 Created: 요청이 성공하여 새로운 리소스가 생성될 때
- 생성된 리소스는 헤더에서 Location필드로 추가된다.
- 202 Accepted: 요청이 접수되었으나 처리가 완료되지 않을 때
- Ex) 배치 처리가 이에 해당한다.
- 204 No Content: 요청이 성공했지만, 응답 페이로드 본문에 보낼 데이터가 없을 때
- Ex) 아무 내용이 없어도 저장 버튼을 눌러도 같은 화면을 유지해야 한다.
3xx(Redirection)
요청을 완료하기 위해 유저의 추가 행동이 필요
- 영구 리다이렉션: 특정 리소스의 URL가 영구적으로 이동한다.
- 301 Moved Permanently: 리다이렉트 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
- 308 Permanent Redirect: 301과 기능은 같지만 리다이렉트 요청 메서드는 변하지 않고 유지한다.
- 일시적인 리다이렉션: 리소스의 URL가 일시적으로 변경한다.
- 302 Found: 리다이렉트 요청 메서드가 GET으로 변하고, 제거될 수 있다.
- 307 Temporary Redirect: 302와 기능은 같지만 리다이렉트 요청 메서드는 변하지 않는다.
- 303 See Other: 302와 기능은 같지만 리다이렉트 요청 메서드가 GET으로 변한다.
- 304 Not Modified: 캐시를 목적으로 사용하고, 클라이언트에 리소스가 수정되지 않았음을 알린다.
일시적인 리다이렉션 예시로 POST로 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트 시킨다. 그렇게 되면 새로 고침을 하여도 중복 주문을 방지할 수 있다.
4xx(Client Error)
클라이언트의 잘못된 요청이나 인증이 실패하여 서버가 요청을 수행할 수 없을 때
- 400 Bad Request: 클라이언트가 보내는 문법오류나 API 스펙이 맞지 않을 때 발생한다.
- 401 Unauthorized: 인증이 되지 않은 클라이언트가 접근할 때 발생한다.
- 403 Forbidden: 인증 자격은 있지만, 접근 권한이 없는 경우 발생한다.
- 404: Not Found: 요청 리소스를 서버가 찾을 수 없을 때 발생한다.
5xx(Server Error)
서버 문제로 오류가 발생할 때
- 500 Internal Server Error: 서버 내부 문제로 오류가 발생 그리고 애매하거나 대다수의 에러는 모두 500 오류를 낸다.
- 503 Service Unavailable: 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없을 때 발생한다.
HTTP 헤더
header-field = field-name ":" OWS field-value OWS
- HTTP 전송에 필요한 모든 부가정보를 담고 있다.
- 필요시 임의의 헤더를 추가 할 수 있다.
표현 헤더
전송,응답 양측에서 사용이 가능하고 표현 데이터를 해석할 수 있는 정보이다.
1. Content-Type
표현 데이터의 형식을 설명한다.
- text/html; charset=utf-8
- application/json
- image/png
2. Content-Encoding
표현 데이터의 인코딩 정보이다.
- gzip, deflate, identity
- 표현 데이터를 압축하기 위해 사용한다.
- 데이터를 전달하는 곳에서 압축 후 인코딩 헤더에 추가한다.
- 데이터를 받는 측에서는 인코딩 헤더의 정보로 압축을 해제한다.
3. Content-Language
표현 데이터의 자연 언어를 설명한다.
- ko, en, en-US
4. Content-Length
표현 데이터의 길이를 나타낸다.
- 바이트 단위이다.
- Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안 된다.
일반 정보
- From: 클라이언트의 이메일 정보로 검색 엔진 같은 곳에서 주로 사용한다 (요청)
- Referer: 이전 웹 페이지 주소로 요청해서 사용하며 유입경로 분석이 가능하다. (요청)
- User-Agent: 클라이언트의 애플리케이션 정보로 통계 정보나 웹 브라우저에서 장애가 발생할 때 파악이 가능하다. (요청)
- Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보를 의미한다. (응답)
- Date: 메시지가 발생한 날짜와 시간을 나타낸다. (응답)
특별한 정보
HOST
- 요청한 호스트(도메인) 정보를 의미한다.
- 요청에서 사용한다.
- 하나의 서버가 여러 도메인을 처리하거나 하나의 IP주소에서 여러 도메인이 적용되어 있을 때 필수적으로 필요한 정보이다.
Location
- 페이지 리다이렉션에서 사용되는 정보이다.
- 3xx 응답에 해당 정보가 있을 경우 자동으로 리다이렉션 한다.
- 201(Created) 응답에서 Location은 리소스 생성 요청에 의해 생성된 리소스 식별자 URI이다.
Allow
- 해당 경로로 허용 가능한 HTTP 메서드 정보이다.
- 경로에 지정한 메서드가 아닌 다른 메서드로 요청을 보낼 경우 405(Method Not Alowed), Allow:...이 응답 메시지에 포함된다.
Retry-After
- 클라이언트가 다음 요청을 하기까지 기다려야 하는 시간이다.
- 503(Service Unavailable): 서비스가 언제까지 불가능한지 알려줄 수 있다.
- Retry-After: 120(초단위 표기)
인증
Authorization
- 클라이언트 인증 정보를 서버에 전달한다.
- Authorization: Basic xxxxxxxxxxxxxxxx
www-Authentication
- 리소스 접근 시 필요한 인증 방법을 정의한다.
- 401 Unauthorized 응답과 함께 사용
- 아래와 같은 방식으로 인증 방법을 정의해준다.
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"
쿠키
HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있게 해주는 작은 데이터 파일입니다.
쿠키 사용
로그인하여 쿠키를 Set-Cookite라는 필드에 저장하고 이후 페이지를 응답할 때마다 쿠키 값을 넘겨준다.
쿠키 용도
- 로그인 정보, 장바구니, 각종 유지해야 할 정보들 세션 관리
- 트래킹: 사용자 행동을 기록하고 분석하는 용도
쿠키 정보는 항상 서버에 전송되기에 네트워크 비용이 추가되기 때문에 항상 최소한의 정보만 담아야 하고 보안에 민감한 정보들은 쿠키에 담으면 안 된다.
쿠키 생명주기
- Set-Cookie: expires=Sat, 26-Dec-2022 14:00:00 GMT → 2022년 12월 26일 14: 00분 00초에 해당 쿠키가 만료된다.
- Set-Cookie: max-age=3600 (3600초) → 3600초 이후 쿠키가 만료된다.
- 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료 시까지만 유지한다.
- 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지한다.
쿠키의 도메인
- 명시한 문서 기준 도메인 + 서브 도메인으로 쿠키 접근 여부가 가능해진다.
- ex) domain=example.org
- example.org , dev.example.org 둘 다 쿠키 접근이 가능하다.
- ex) example.org(도메인 생략)
- example.org에서만 쿠키 접근이 가능하고 그 외 서브도메인은 접근이 불가능하다.
쿠키 경로 지정
- path 필드의 경로와 그 하위 경로에서만 쿠키 접근이 가능해진다.
- 일반적으로 path=/ 루트로 지정한다.
쿠키 보안 지정
- Secure: 쿠키는 http, https 모두 전송하지만 Secure를 사용하면 https인 경우에만 전송한다.
- HttpOnly: Xss 공격을 방어하고 자바스크립트의 접근을 막는다.
- SameSite: XSRF 공격을 방어하고 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 전송한다.
Xss: 공격자가 상대방의 브라우저에 스크립트를 삽입해 공격
XSRF: CSRF라고도 한다. 쿠키만으로 인증하는 서비스의 취약점을 이용해 서비스에 특정 명령을 요청하는 공격.
출처
인터넷 네트워크 강의
'네트워크' 카테고리의 다른 글
HTTP 정리 - 캐시와 조건부 요청 (0) | 2022.08.19 |
---|---|
HTTP 정리 - 기본 (0) | 2022.08.10 |
인터넷 네트워크 정리 (0) | 2022.08.04 |