[TIL] 웹 기초 지식 HTTP

김희산·2022년 12월 24일
0

TIL

목록 보기
11/23

HTTP(Hypertext Transfer Protocol)

HTTP는 Hypertext Transfer Protocol의 약자로 직역하자면 전송하는 프로토콜이라는 뜻인데 Hypertext를 전송한다는 뜻이다.

Hypertext는 예전에 텍스트 형식의 문서만 주고 받았기 때문에 저렇게 사용하였는데 요즘에는 Hypermedia로 보는게 더 맞지 않나 싶다. 텍스트파일이나 json 뿐만 아니라 mp3나 video나 다양한 미디어들도 HTTP를 통해 주고 받기 때문이다.

HTTP는 클라이언트가 서버에게 특정한 요청을 하게되고 서버는 클라이언트에게 응답을 보내주는 요청과 응답으로 이루어진 프로토콜이라고 볼 수 있다.

  • http를 사용하면 처음에 TCP Connection이 생김

  • 요청이 끝나고 응답이 끝나면 TCP Connection이 닫힘

  • http는 암호화처리 안되어있음 ( 제3자가 가로챌 수 도 있음 )

  • https는 암호화처리 되어있어서 안전하게 데이터 주고 받을 수 있음

Status Codes

상태 코드라고 하며 3자리 숫자로 만들어져 있고, 첫번째 자리는 1에서 5까지 제공된다.
첫번째 자리가 4와 5인 경우는 정상적인 상황이 아니기 때문에 사이트 관리자가 즉시 알아야 하는 정보이다.

여기에 적힌 상태코드가 전부는 아니지만 대표적인 상태코드만 정리해보았다.

server에서 client 에게 응답 보낼 때 status codes 를 포함해서 보낸다. status codes는 http 표준에서 정의되어있고 약속이다.

  • 1xx -> Informational

    • 100 Continue
    • 101 Switching Protocol
    • 102 Processing (아직 끝나지 않았지만 처리중임)
  • 2xx -> successful

    • 200 ok (성공)
    • 201 Created (성공적을 만듬)
    • 204 No contents (요청처리는 했지만 클라이언트가 원하는 데이터가 없을때)
  • 3xx -> Redirection

    • 301 Moved Permanently (다른 URL로 데이터가 옮겨감)
    • 302 found
    • 303 See Other
    • 307 Temporary Redirection
    • 308 Permanent Redirection
  • 4xx -> client error

    • 400 Bad Request (쿼리,api 등 잘못됐을때 )
    • 401 Unauthorized (권한이 없는 클라이언트가 요청했을 때)
    • 403 Forbidden(admin)
    • 404 Not found (원하는 url이 존재x)
    • 405 Method Not Allowed
    • 409 Conflict
  • 5xx -> server error ( 최대한 피하자... )

    • 500 Internal Server error
    • 502 Bad Gateway
    • 503 Service Unavailable

URL

URL이란 사용자가 원하는 정보의 위치와 종류를 파악할 수 있도록 웹페이지의 정보 구조를 반영한 것이다. 리소스를 나타나낸 주소라고 생각하면 된다. URL은 프로토콜, 호스트(도메인,포트), 서브 디렉토리, 웹 페이지로 이루어져 있지만 대부분 웹사이트는 프로토콜, 도메인, 서브 디렉토리 정도만 표시된다.

  • https: 프로토콜
  • www.server.com: hostname
  • 433 : port(어떤 포트인지)
  • /이후 : path(경로)

HTTP Request Methods

Request Methods란 서버에서 주어진 리소스에 수행하길 원하는 행동을 나타낸다. 메소드에 따라 서버에서 여러가지 작업을 수행하도록 만들어졌다. 주로 GET,POST 를 많이 사용하지만 종류에 대해 열거해보았다.

  • Get : get
  • POST : create (201 401 403 404 409)
  • PUT : replace (200 204 403 404 405)
  • DELETE : delete (200 204 403 404 405)
  • PATCH : replace partially (200 204 403 404 405)
  • HEAD : get without body (200 401 403 404 405)
  • OPTIONS : all supported methods for URL (200 401 403 404 405)
  • TRACE : echoes the received request (200 401 403 404 405)

client가 server에게 변경하지 않는 요청으로는 GET,HEAD,OPTIONS,TRACE 가 있고 서버에 있는 데이터를 변경하는 요청은 POST, PUT, DELETE, PATCH 가 있다.

####Idempotent
HTTP Request Method를 살펴보다가 'Idempotent' 라는 단어를 보게 되었다.
Idempotent란 '동일한 요청을 여러번 했을 때 얼마나 빠르게했냐에 상관없이 항상 서버를 동일한 상태로 유지 할 수 있는가' 를 뜻한다.

request마다 이 Idempotent가 보장되는게 다르다. 대표적인 몇가지만 알아보겠다.

  • GET : 서버에 존재하는 리소스를 단순히 읽어오기만 하기 때문에 여러번 수행되어도 서버는 동일한 상태를 유지 한다. 그렇기 때문에 Idempotent는 'Yes' 이다.
  • PUT : 서버에 존재하는 리소스를 요청대로 전부 대체해버리므로 여러번 수행되어도 결과 값을 변하지 않을 것이다. 따라서 IIdempotent는 'Yes' 이다.
  • DELETE : 존재하는 데이터를 삭제한 결과와 이미 존재하지 않은 결과를 삭제하려는 시도에 대한 응답 코드는 서로 다르겠지만, 서버의 상태 자체는 변하지 않으므로 여러번 수행되어도 결과 값이 변하지 않는다. 마찬가지로 Idempotent는 'Yes' 이다.

하지만 POST 요청은 다르다. POST 메소드가 호출될 때 마다 데이터베이스에 요청된 데이터가 추가될 것이고, 이는 Idempotent가 No 이다. 호출시 마다 서버의 상태가 달라지기 때문이다.

profile
성공은 제로섬 게임이 아니라 주변인들과 함께 나아가는 것이다.

0개의 댓글