네트워크

HTTP 정리 - 상태코드와 헤더

Rudtjs 2022. 8. 16. 18:59

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