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
- 1989 - HTTP
- 1994 - HTTPs
: 보안 개선
- 1997 - HTTP v1 : HTTP/HTTPs 둘 다 가능
: text-based
: client, server 간 이동 데이터가 text - 보안 약함
: header가 압축안되어서 크기가 크다
: 한번에 한 파일만 전송 가능
- 2015 - HTTP v2 : 둘 다 가능하나 대부분 HTTPs
: binary based(보안 상승)
: header 압축
: 한 번에 여러 파일 전송 가능
- 2019 - HTTP v3 : HTTPs만 가능, 크롬에서 베타
: TCP -> UDP
3. status code
status code는 HTTP 표준에서 정의한 것으로 브라우저, 모바일 등 모든 환경에서 약속한 것이다.
3-1. status 코드 단위
- 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
- 요청할 때 body 없다
- 응답에서 body 있다.
- safe하다 => read only, 즉 서버의 데이터 안 건드린다.
- 멱등성 => 몇 번을 어떻게 실행하더라도 똑같은 결과가 나올 것으로 기대가 된다.
- cache가 가능하다.
post
- 요청 시, body를 써줘야 한다.
- post는 서버의 데이터를 create하기 때문에 safe하지 않다.
- 멱등성 : 서버의 데이터를 건드리기 때문에 그 결과가 항상 다를 것으로 예상된다.
- cache도 때에 따라서
put
vs patch
put은 모든 데이터를 바꾸기 때문에 idempotent
가 yes이다.
반댇로 patch는 부분만 수정하기 때문에 idempotent
가 no이다.
http로 통신을 할 때, header 내에 여러 정보를 담고 있다. 이 때, standard와 custom으로 정보의 종류를 나눌 수 있다. 더 자세한 건 밑에서 보자.
-
session & cookies
: header 안에 Set-Cookie:auth token = XXX...
형식으로 서버에서 auth token을 던지고,
클라이언트는 이를 쿠키에 저장하다가 request할 때, 그 header에 cookie:auth token = XXX...
으로 자동으로 보낸다.
-
standarad attribute vs custom attribute
-
standard
-
cache-control : 언제까지 cache할 지 명시
-
User-Agent : 어떤 클라이언트인지(브라우저, os 정보 들고 있다)
-
authorization
-
content-length, content-type
-
custom
- domain-key, domain.key로 쓴다.
되도록이면 standarad를 쓰는 것이 좋다.
5. 용어
-
탄생 배경
클라이언트에서 내가 원하는 서버까지 도달하는데 여러 경로들이 존재하게 되는데, 이 과정에서 요청과 응답의 내용을 다른 지점에서 쉽게 확인 가능하고 통신하는 상대방의 신원을 확인할 수 없다는 문제가 있었다. 요청과 응답을 주고 받는 과정에서 데이터 변조의 가능성도 있다.
-
정의
Transport Layer Security로 전송계층보안이며,
응용 계층의 데이터의 암호화 및 암호화된 전송 계층 데이터의 복호화를 한다.
TCP 443 포트 사용.
-
역할
- 암호화 : 정해진 피어만 메시지 내용 확인 가능
- 인증 : 메시지 발신자의 신원 확인
- 무결성 : 메시지 위/변조되지 않았음을 보장
(참고자료) 우테코 TLS 강연