[WEB] HTTP

SeHoony·2022년 8월 15일
2

면접 대비

목록 보기
1/4

1. HTTP vs HTTPs

  • HTTP (Hypermedia Transfer Protocol)
    HTML, mp3, mp4, JSON을 전송하는 규약으로 Request-Response로 이루어진다.
  • HTTPs (Hypermedia Transfer Protocol secure)
    TLS / SSL을 통해 client와 server가 주고 받는 데이터를 암호화하여 3자는 열람 불가하다.

2. History

  1. 1989 - HTTP
  2. 1994 - HTTPs
    : 보안 개선
  3. 1997 - HTTP v1 : HTTP/HTTPs 둘 다 가능
    : text-based
    : client, server 간 이동 데이터가 text - 보안 약함
    : header가 압축안되어서 크기가 크다
    : 한번에 한 파일만 전송 가능
  4. 2015 - HTTP v2 : 둘 다 가능하나 대부분 HTTPs
    : binary based(보안 상승)
    : header 압축
    : 한 번에 여러 파일 전송 가능
  5. 2019 - HTTP v3 : HTTPs만 가능, 크롬에서 베타
    : TCP -> UDP

3. status code

status code는 HTTP 표준에서 정의한 것으로 브라우저, 모바일 등 모든 환경에서 약속한 것이다.

3-1. status 코드 단위

100 단위 : information

  • 100 : 계속해
  • 102 : 니가 요청한 거 처리 중이야

200 단위 : 성공(서버에서 성공적으로 처리)

  • 200 : OK 끝
  • 201 : 클라이언트가 요청한 리소스 생성 성공
  • 204 : 클라이언트가 요청한 거 처리했는데 contents가 없네

300 단위 : 리다이렉션(클라이언트에서 요청한 URL에 변경이 있을 때)

  • 301 : 니가 요청한 거 영구적으로 다른 곳으로 갔어
  • 302 : 니가 요청한 거 당분간 어디로 갔어
  • 303 : (get 요청) 당분간 다른 곳으로 갔어
  • 307 : (get이든 post든 요청한 메소드에 한해서) 당분간 어디로 갔다고 알려줌
  • 308 : (get이든 post든 요청한 메소드에 한해서) 영구적으로 어디로 갔다고 알려줌

400 단위 : 클라이언트 에러

  • 400 : 쿼리나 API 잘못 사용
  • 401 : 로그인되지 않은 사람이 특정 API 요청
  • 403 : 로그인되더라도 권한이 없을 때(admin만)
  • 404 : 원하는 URL 존재 없음
  • 405 : 해당 URL에 한해 쓰거나 삭제하는 기능 허용 안됨
  • 409 : 충돌

500 단위 : 서버 에러

  • 500 : 서버 내부 문제로 일 처리 못함
  • 502 : 중간 서버가 요청에 따라 일 처리해야하는데 못할 때
  • 503 : 서버 준비 안됐을 때

4. Request Method

https://www.server.com/courses/backend/search?q=love
protocol / hostname / path / query

  • 사용한 request method에 따라 어떤 status 코드가 나올 지 예상하여 방어코드를 기입해도 좋을 거 같다.
  • safe : read only
    - 서버의 데이터를 변경하지 않는 method : get, head, options, trace
    - 서버의 데이터를 변경 : post, put, delete, patch
  • idempotent : 동일한 요청을 많이 해도 항상 서버를 동일한 상태로 유지 가능한가

MDN에서 request methods 확인하기

  • get
  1. 요청할 때 body 없다
  2. 응답에서 body 있다.
  3. safe하다 => read only, 즉 서버의 데이터 안 건드린다.
  4. 멱등성 => 몇 번을 어떻게 실행하더라도 똑같은 결과가 나올 것으로 기대가 된다.
  5. cache가 가능하다.
  • post
  1. 요청 시, body를 써줘야 한다.
  2. post는 서버의 데이터를 create하기 때문에 safe하지 않다.
  3. 멱등성 : 서버의 데이터를 건드리기 때문에 그 결과가 항상 다를 것으로 예상된다.
  4. cache도 때에 따라서
  • put vs patch
    put은 모든 데이터를 바꾸기 때문에 idempotent가 yes이다.
    반댇로 patch는 부분만 수정하기 때문에 idempotent가 no이다.

5. Header

http로 통신을 할 때, header 내에 여러 정보를 담고 있다. 이 때, standard와 custom으로 정보의 종류를 나눌 수 있다. 더 자세한 건 밑에서 보자.

  1. session & cookies
    : header 안에 Set-Cookie:auth token = XXX... 형식으로 서버에서 auth token을 던지고,
    클라이언트는 이를 쿠키에 저장하다가 request할 때, 그 header에 cookie:auth token = XXX...으로 자동으로 보낸다.

  2. standarad attribute vs custom attribute

  • standard

    • cache-control : 언제까지 cache할 지 명시

    • User-Agent : 어떤 클라이언트인지(브라우저, os 정보 들고 있다)

    • authorization

    • content-length, content-type

  • custom

    • domain-key, domain.key로 쓴다.
      되도록이면 standarad를 쓰는 것이 좋다.

5. 용어

  • TLS/SSL
  1. 탄생 배경
    클라이언트에서 내가 원하는 서버까지 도달하는데 여러 경로들이 존재하게 되는데, 이 과정에서 요청과 응답의 내용을 다른 지점에서 쉽게 확인 가능하고 통신하는 상대방의 신원을 확인할 수 없다는 문제가 있었다. 요청과 응답을 주고 받는 과정에서 데이터 변조의 가능성도 있다.

  2. 정의
    Transport Layer Security로 전송계층보안이며,
    응용 계층의 데이터의 암호화 및 암호화된 전송 계층 데이터의 복호화를 한다.
    TCP 443 포트 사용.

  3. 역할

    • 암호화 : 정해진 피어만 메시지 내용 확인 가능
    • 인증 : 메시지 발신자의 신원 확인
    • 무결성 : 메시지 위/변조되지 않았음을 보장

(참고자료) 우테코 TLS 강연

profile
두 발로 매일 정진하는 두발자, 강세훈입니다. 저는 '두 발'이라는 이 단어를 참 좋아합니다. 이 말이 주는 건강, 정직 그리고 성실의 느낌이 제가 주는 분위기가 되었으면 좋겠습니다.

0개의 댓글