HTTP, REST, HTTP Status Code, 쿠키&세션

김석재·2025년 1월 12일
0

HTTP

HTTP(Hypertext Transfer Protocol) : 클라이언트와 서버 간 통신 프로토콜로 클라이언트가 요청(Request) 을 보내면 서버가 응답(Response) 을 보냄

  • 요청(Request)
    - 클라이언트가 서버에 데이터를 요청하는 메시지
    - HTTP 메서드 : 요청 의도를 나타냄(GET, POST, PUT, DELETE)
    - URL : 요청 대상의 리소스 주소
    - 헤더(Header) : 요청정보(인코딩, 인증 등)
    - 본문(Body) : 추가적인 데이터
  • 응답(Response)
    - 서버가 요청에 대해 반환하는 메시지
    - 상태코드 : 요청 결과를 나타내는 숫자 코드(200, 400, 500 등등)
    - 헤더(Header) : 응답 메타데이터
    - 본문(Body) : 요청한 데이터나 메시지
  • HTTP 와 HTTPS 의 차이
    - HTTP : 텍스트 기반 프로토콜로 암호화되지 않은 데이터 전송
    - HTTPS : 보안을 강화한 HTTP 로 SSL/TLS 를 사용해 데이터 암호화

HTTP 상태 코드

  1. 1xx (정보)
    • 요청 수신 완료. 프로세스 계속 진행
상태 코드이름설명
100Continue요청의 시작 부분이 받아들여졌으며 클라이언트는 계속 이어서 보내야 함
이미 요청을 완료한 경우에는 무시해도 됨
101Switching Protocol요청 헤더의 Update 필드 중 하나로 서버가 프로토콜을 변경함
102Processing서버가 요청을 수신하고 이를 처리하고 있으나 제대로 된 응답을 알려줄 수 없음
  1. 2xx (성공)
    • 요청 성공적으로 처리됨
상태 코드이름설명
200OK요청을 정상적으로 처리함
201Created성공적으로 생성에 대한 요청을 받았으며 서버가 새 리소스를 작성함 (대개 POST, PUT일 때)
202Accepted요청을 접수했지만 아직 처리하지 않음 (요청은 적절했음)
203Non-Authoritative Information요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공함, 검증이 되지 않은 상태
204No Content서버가 요청을 성공적으로 처리했지만 제공할 컨텐츠는 없음
205Reset Content서버가 요청을 성공적으로 처리했지만 새로운 내용을 확인해야 함을 알려줌 (새로고침 등)
206Partial Content서버가 GET 요청의 일부만 성공적으로 처리함
- Content-Range와 Date 헤더를 반드시 포함
207Multi Status여러 개의 리소스가 여러 status code를 갖고 있는 상황에서 적절한 정보 전달
208Already ReportedDAV에서 사용
  1. 3xx (리다이렉션)
    • 클라이언트의 요청에 대해 적절한 리다이렉션을 제공하거나 대안 응답 제공
상태 코드이름설명
300Multiple Choice클라이언트가 동시에 여러 응답이 가능한 요청을 보냈을 경우 클라이언트의 선택지를 반환
301Moved Permanently요청한 리소스의 URI가 변경됨 -> 변경된 URI에 대한 정보와 함께 응답
302Found요청한 리소스의 URI가 일시적으로 변경된 것이므로 원래 요청했던 URI로 요청해야 함
303See Other클라이언트가 요청한 작업을 하기 위해서는 다른 URI에서 얻어야 할 때 클라이언트에게 줌
304Not Modified이전의 요청과 비교하여 달라진 것이 없음 (캐시를 목적으로 사용됨)
305Use Proxyproxy를 통해 요청되어야 함
306Unused지금은 사용하지 않는 코드 -> 추후 사용을 위해 예약되어 있음
307Temporary Redirect302와 동일하나 클라이언트가 보낸 HTTP 메소드도 변경하면 안됨
308Permanent Redirect요청한 리소스가 영구적으로 다른 URI에 위치하고 있음, 301과 동일하나 HTTP 메소드도 변경하지 말 것
  1. 4xx (클라이언트 에러)
    • 클라이언트의 잘못된 요청
상태 코드이름설명
400Bad Request잘못된 문법으로 요청을 보내고 있어 서버가 이해할 수 없음
401Unauthorized요청을 위해 권한 인증이 필요함 (예: 토큰이 없음)
402Payment Required결제 시스템을 위해 만들어졌으나 현재는 사용하지 않음
403Forbidden클라이언트가 요청한 컨텐츠에 대해 접근할 권리가 없음 (신원 인증은 되었지만 권한은 없음)
404Not Found요청한 URI를 찾을 수 없음
405Method Not Allowed클라이언트가 보낸 메소드가 해당 URI에서 지원하지 않음
406Not Acceptable클라이언트의 요청에 대해 응답할만한 컨텐츠가 없음
407Proxy Authentication Required401과 동일하나, proxy를 통해 인증해야 함
408Request Timeout요청에 응답하는 시간이 오래 걸려 요청을 끊음 (보내지 않고 끊을 때도 있음)
409Conflict클라이언트의 요청이 서버의 상태와 충돌이 발생할 수 있음
410Gone요청한 URI가 더 이상 사용되지 않고 사라졌음
411Length Required요청 헤더에 Content-length가 포함되어야 함
412Precondition Failed요청 헤더의 조건이 서버의 조건에 적절하지 않음
413Payload Too Large요청 payload가 서버에서 정의한 최대 크기보다 큼
414URI Too Long요청된 URI가 너무 길어서 처리할 수 없음
415Unsupported Media Type서버가 지원하지 않는 미디어 포맷을 요청함
416Requested Range Not Satisfiable요청 헤더에 있는 Range 필드가 잘못됨
417Expectation Failed요청 헤더에 있는 Expect 필드가 적절하지 않음
418I'm a teapot서버는 티팟이므로 커피 내리기를 거절했음
421Misdirected Request요청이 응답을 생성할 수 없는 서버로 지정됨
422Unprocessable Entity문법 오류로 인하여 처리할 수 없음
423Locked요청한 리소스는 접근하는 것이 잠겨있음
424Failed Dependency이전 요청이 실패했기 때문에 현재의 요청도 실패했음
425Too Early서버가 재생될 수 있는 요청을 처리하는 것을 원치 않음
426Upgrade Required현재 요청한 프로토콜에 대한 처리는 거절함, 다른 프로토콜로 업그레이드를 하면 처리 가능
428Precondition Required필수 전제 조건 헤더가 누락됨
429Too Many Requests클라이언트가 한정된 시간에 너무 많은 요청을 보냄
431Request Header Fields Too Large요청한 헤더 필드가 너무 커서 처리할 수 없음, 헤더 필드를 줄여서 다시 요청해야 함
451Unavailable For Legal Reasons클라이언트가 요청한 것은 정부에 의해 검열된 불법적인 리소스임
  1. 5xx (서버 에러)
    • 클라이언트의 정상 요청에 대해 서버 문제로 인해 응답 불가
상태 코드이름설명
500Internal Server Error서버의 문제로 응답할 수 없음
501Not Implemented서버가 지원하지 않는 새로운 메소드를 사용하여 요청함
클라이언트 요청에 대해 서버가 수행할 수 있는 기능이 없음
502Bad Gateway서버 위의 서버에서 오류가 발생, proxy나 gateway 등에서 응답함
503Service Unavailable현재 서버가 일시적으로 사용이 불가함
일반적으로 유지보수로 인해 중단되거나 과부하가 걸린 서버임
504Gateway Timeout서버가 다른 서버로 요청을 보냈으나 delay가 발생하여 처리가 불가능함
505HTTP Version Not Supported서버가 지원하지 않거나 적절하지 않은 프로토콜로 요청을 함
506Variant Also Negotiates서버에 내부 구성 오류가 있음
507Insufficient Storage서버에 내부 구성 오류가 있음
508Loop Detected요청을 처리하는 동안 무한 루프를 감지함
510Not Extended서버가 처리하기 위해서는 요청을 더 확장해야 함
511Network Authentication Required클라이언트가 네트워크 액세스를 얻으려면 인증이 필요함

REST 와 RESTful

  • REST(REpresentational State Transfer) 는 어떤 자원에 대해 CRUD 연산 수행시 URI(Resource)로 행위(GET, POST 등의 Method)을 사용해 요청을 보내는데, 이때 특정 형태(JSON, XML 등등) 으로 표현됨

  • RESTful 은 REST 의 원칙을 준수하는 시스템 혹은 API 를 의미하며 아래와 같은 특성을 지님

  1. 리소스 URL 설계 : URL 은 명확하고 간결해야 하며 자원을 명시적으로 나타내야함 ex) GET /users, GET/users/ssg
  2. HTTP 메서드 사용 : CRUD 작업을 HTTP 메서드로 한다
  3. 무상태성(Stateless) : 클라이언트의 context 를 서버에 저장하지 않고, 서버는 각각의 요청을 별개의 것으로 인식 및 처리함
  4. HTTP 상태 코드 활용 ex) 200 요청 성공이나 400, 500 등

쿠키(Cookie)

쿠키는 사용자의 컴퓨터에 저장하는 작은 텍스트 파일로 유효시간 지정 가능하며 클라이언트 상태 정보를 로컬에 저장했다 참조함

  • 장점
  1. 클라이언트쪽 저장으로 서버 부하의 감소
  2. 간단한 데이터 저장 및 전송 가능
  • 단점
  1. 클라이언트가 데이터 수정 가능하므로 신뢰성 떨어짐
  2. 브라우저에 의존하고, 쿠키의 크기와 개수 제한이 있음

세션(Session)

세션은 서버에 저장되는 데이터 저장소로 유출되면 안될 데이터를 주로 저장함.

  • 세션 프로세스
  1. 클라이언트가 서버 접속시 세션 ID 를 발급하면
  2. 서버에서 클라이언트로 발급해준 세션 ID 를 쿠키를 이용해 전송하고
  3. 이후 재접속 시 쿠키에 저장된 세션 ID 를 서버에 전달하면
  4. 서버는 요청 헤더에 쿠키 정보로 클라이언트를 판별함

세션과 쿠키의 차이

구분쿠키(Cookie)세션(Session)
저장 위치클라이언트(브라우저)서버
수명브라우저 종료 시 삭제(세션 쿠키) 또는 만료 시간 설정브라우저 종료 또는 세션 만료 시간 경과 시 삭제
보안클라이언트가 수정 가능(XSS 취약성)서버에서 관리하므로 클라이언트가 수정 불가
데이터 크기 제한제한적(4KB)상대적으로 제한 없음
사용 용도간단한 데이터 저장, 상태 유지인증, 사용자별 데이터 관리
속도클라이언트에서 바로 데이터 사용서버 요청 필요
의존성클라이언트(브라우저) 의존서버 의존







참조(HTTP Status Code) : https://hocheon.tistory.com/68

0개의 댓글