[WEB] HTTP 란 무엇일까



1. HTTP

  • HyperText Transper Protocol의 준말, 링크 기반으로 데이터를 요청하고 받겠다는 것
  • 클라이언트와 서버가 요청을 하고 응답을 하기 위해 따르는 프로토콜
  • HTML 문서를 주고 받을 수 있으며, 이미지, 동영상, 오디오, 텍스트 문서 등을 주고 받을 수 있음

2. HTTP 동작 방식

db문제점

3. HTTP 특징 및 기능

1) connectless + stateless

  • 한번 요청-응답 한 후 연결을 끊어버림
  • 서버는 클라이언트의 이전 상태를 알 수 없음(때문에 쿠키와 세션이 필요)
  • 수십만명이 웹서비스를 요청하더라도 최소 유지를 할 수 있기 때문에, 많은 유저의 요청을 처리할 수 있음

2) keep-alive

  • 위의 언급과 같이 http는 1요청-1응답을 기준으로 설계됨
  • 요즘 웹사이트들은 하나의 페이지에 수십개의 이미지, css파일, js 파일이 있는 것을 볼 수 있음
  • 1요청-1응답 기준이라면 여러번 연결을 끊었다가 붙였다 해아하므로 굉장히 비효율적
  • keep-alive 지원으로 지정된 시간동안 연결을 끊지 않고 연결된 상태를 유지할 수 있음
  • keep-alive time out 내 클라이언트가 재요청하면 새로운 연결이 아닌 연결된 것을 이용함

    1. 웹서버 연결
    2. HTML 문서 다운로드
    3. 필요한 img, css, js 등 다운로드
    4. 연결 끊음


4. HTTP Request 구조

클라이언트 프로그램을 이용한 사용자가 서버에 요청을 보낼 때 HTTP Request 구조를 알아본 것
db문제점 1) 메소드(Header) : 사용자가 서버에 요청하는 메소드, HTTP 버전을 확인할 수 있음
2) 요청헤더(Header) : 서버에 전달되는 사용자 정보(클라이언트의 브라우저 정보 : 문자코드, 언어, 파일 종류)
3) 공백 : HTTP Request(헤더)와 본문 부분을 구분하기 위한 공백
4) 본문(message) : HTTP Request 요청 메세지를 담고 있는 부분, GET 메소드의 경우 요청정보가 주소에 담겨져있어 본문은 빈 상태

5. HTTP Response 구조

서버가 사용자 요청에 대한 응답을 할 때 HTTP Response 구조를 알아본 것
db문제점
1) 상태코드(Header) : 사용자의 요청에 대한 서버 처리 결과를 나타냄
2) 응답헤더 (Header) : 사용자에게 전달한 데이터 정보를 나타냄
3) 공백 : HTTP Response Header(헤더)와 본문 부분을 구분하기 위한 공백
4) 본문(message) : 사용자에게 전달한 데이터 내용을 담고 있음(요청에 대한 데이터 응답)

6. HTTP method

메소드란?

요청의 종류를 서버에 알리기 위해 사용하는 것. 게시판 기능(CRUD, REST API)을 만들 때 사용

메소드 종류

1) GET : 정보를 요청하기 위해 사용 (Read)
2) POST : 정보를 입력하기 위해 사용 (Create)
3) PUT : 정보를 업데이트하기 위해 사용 (Update)
4) DELETE : 정보를 삭제하기 위해 사용 (Delete)


  • GET : 요청받은 URI의 정보를 검색하여 응답한다.
  • HEAD : GET 방식과 동일하지만, 응답에 BODY가 없고 응답코드와 HEAD만 응답한다. 웹서버 정보확인, 헬스체크, 버전확인, 최종수정일자 확인 등의 용도로 사용된다
  • POST : 요청된 자원을 생성한다.(Create) 새로 작성된 리소스의 경우 HTTP 헤더 항목 Location : URI 주소를 포함하여 응답.
  • PUT : 요청된 자원을 수정한다.(Update) 내용 갱신을 위주로 Location : URI를 보내지 않아도 된다. 클라이언트측은 요청된 URI를 그대로 사용하는 것으로 간주함.
  • PATCH : PUT 과 유사하게 요청된 자원을 수정할 때 사용한다.(Update) PUT의 경우 자원 전체를 갱신하는 의미지만, PATCH는 해당자원의 일부를 교체하는 의미로 사용.
  • DELETE : 요청된 자원을 삭제할 것을 요청함 (안전성 문제로 대부분의 서버에서 비활성)
  • CONNECT : 동적으로 터널 모드를 교환, 프록시 기능을 요청시 사용
  • TRACE : 원격지 서버에 루프백 메시지를 호출하기 위한 테스트용으로 사용
  • OPTIONS : 웹서버에서 지원되는 메소드의 종류를 확인할 경우 사용



HTTP 멱등성

멱등(idempotent)의 의미는 같은 작업을 계속 반복해도 같은 결과가 나오는 경우를 의미한다.
동일한 자원에 대한 GET 요청이라면 클라이언트에 반환되는 모든 응답은 동일해야한다.
특정 자원에 대한 DELETE의 경우도 자원은 더이상 이용할 수 없어야 하며, DELETE 요청을 다시 홏출한 경우도 자원은 여전히 호출할 수 없는 상태여야 한다.



POST와 PUT의 차이

POST는 INSERT의 개념으로 사용되고, PUT은 UPDATE 개념으로 생각하자.
또한 POST는 멱등하지 않고 PUT은 멱등하다.
즉 동일한 자원을 여러번 POST 하면 버서 자원에는 변화가 생기지만, 여러번 PUT 하는 경우는 변화가 생기지 않는다.



PUT과 PATCH의 차이

PUT은 해당 자원의 전체를 교체하는 의미를 지니는 대신 PATCH는 일부를 변경한다는 의미를 지닌다.
최근 UPDATE 이벤트에서는 PUT보다 PATCH가 더 의미적으로 적합하다고 평가받고 있다.
또한 PUT은 멱등하지만 PATCH는 멱등하지 않다.
PUT은 전체 자원을 업데이트 하기 때문에 동일 자원에 대해서 동일하게 PUT을 처리하는 경우 멱등하게 처리된다.
반면 PATCH로 처리되는 경우 자원의 일부가 변경되기 때문에 멱등성을 보장할 수 없다.

7. HTTP 응답 상태 코드

  • 100: 정보 응답
  • 200 : 성공 응답
  • 300 : 리다이렉션 메시지
  • 400 : 클라이언트 에러 응답
  • 500 : 서버 에러 응답

  • 200 : 클라이언트의 요청을 정상적으로 수행함
  • 201 : 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨 (POST를 통한 리소스 생성 작업 시)
  • 400 : 클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드
  • 401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 (EX.로그인 하지 않은 유저가 로그인 했을 때의 요청 가능한 리소스를 요청했을 때)
  • 403 : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리솟를 클라이언트가 요청했을 때 사용하는 응답 코드 (403 보다는 > 400이나 404를 사용할 것을 권고, 403 자체가 리소스가 존재한다는 뜻이기 때문)
  • 405 : 클라이언트가 요청한 리소스에서는 사용 불가능한 METHOD를 이용했을 경우 사용하는 응답 코드
  • 301 : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드 (응답 시 Location header 에 변경된 URI를 적어 줘야 함)
  • 500 : 서버에 문제가 있을 경우 사용하는 응답코드



더 많은 상태 코드 https://developer.mozilla.org/ko/docs/Web/HTTP/Status/