[Network] HTTP-요청 흐름/Http메소드/상태코드

sohee·2022년 9월 24일
0

HTTP

웹 브라우저의 요청 흐름


먼저 URL에 쓰인 각각의 의미를 먼저 살펴보자면, www.google.com은 도메인명으로 DNS 서버에서 도메인명에 매칭되는 IP를 가진 서버를 응답해주는 형식이다.
443은 https 포트 번호를 의미하는데 생략해도 접속이 가능하다. 또한, http는 80포트를 사용한다.
/search는 리소스 경로(path)를 의미한다.
?뒤의 q=hello&hi=ko는 쿼리 파라미터, 쿼리 스트링 등으로 불린다. 웹서버에 제공하는 파라미터, 문자 형태이다.

위와같이 요청을 하게 되면, 아래와 같은 HTTP 요청 메시지가 생성된다.

클라이언트가 HTTP요청을 하게 되면 서버는 아래와 같이 HTTP응답 메시지를 돌려준다. HTTP/1.1은 HTTP1.1 버전을 사용했다는 의미이며, 200은 상태코드로 정상적인 응답을 내려줄때 사용된다.
Content-Type부터 Content-Length는 HTTP 헤더를 나타낸다. 필요시 임의의 헤더는 추가가 가능하다.
html태그 안의 내용은 message body에 해당한다.

클라이언-서버의 구조는 Request Response 구조에 해당하는데, 클라이언트가 보낸 상태를 보존 하느냐 않하느냐에 따라 Stateless, Stateful 상태로 나뉜다.

  1. Stateful(상태유지)
    Stateful같은 경우 항상 같은 서버가 유지 되어야 한다.
    만약 여러대의 분산서버가 있고 클라이언트가 서버1에 요청을 한 경우, 서버1에 장애가 나면 클라이언트는 응답을 받을 수 없는 단점이 존재한다. 이러한 점에서 상태 유지는 최소한만 사용하는 것이 좋다.

  2. Stateless(무상태)
    Stateless같은 경우 클라이언트가 서버에 요청을 보낼때, 필요한 정보를 그때마다 담아서 요청을 보내기 때문에 아무 서버나 호출해도 같은 응답을 받는다. 이렇게 보면 무상태만 쓰면 되는거 아니야?라고 생각이 들겠지만 모든 것을 무상태로 설계할 수는 없는 경우도 있다.

HTTP Method

  1. GET: 리소스 조회
    서버에 전달하고 싶은 데이터는 쿼리 파라미터(쿼리 스트링)을 통해서 전달한다. 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.

  2. POST: 요청 데이터 처리, 주로 등록에 사용
    메시지 바디를 통해서 서버로 요청 데이터를 전달한다. 주로 전달된 데이터로 신규 리소스를 등록하거나, 프로세스를 처리하는데 사용한다.

  3. PUT: 리소스를 대체, 해당 리소스가 없으면 생성
    POST는 서버가 URI를 지정한다면, PUT은 클라이언트가 리소스 위치를 알고 URI를 지정한다.

  4. PATCH: 리소스 부분 변경
    PUT은 리소스를 완전히 대체해버린다면, PATCH는 요청보내는 데이터만 변경을 하게 된다.

    예를 들어 위와 같은 요청을 보낼때 PUT같은 경우는 /members/100에 age=50을 보내게 되면

  5. DELETE: 리소스 삭제

  6. HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환

  7. OPTIONS: 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)

  8. CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정

HTTP 메서드의 속성

메서드의 속성에는 안전, 멱등 ,캐시가능 여부가 있다.

  • 안전(Safe)이란 호출해도 리소스를 변경하지 않는 메소드를 말하며, 대표적으로 GET이 있다.
  • 멱등(Idempotent)이란 여러번 호출해도 항상 결과가 똑같다는것을 의미한다. 멱등은 서버가 timeout 등으로 정상 응답을 주지 못할때, 클라이언트가 같은 요청을 다시 해도 되는가에 대한 판단 근거로 활용한다.
  • 캐시가능(Cacheable)

Status Code

  • 200번대: 요청 정상 처리
  • 300번대: 요청을 완료하려면 추가 행동 필요
  • 400번대: 클라이언트 오류
  • 500번대: 서버 오류

(참고)인프런의 김영한님 HTTP강의
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard

profile
기억하려고 적는 개발 로그🌞

0개의 댓글