O ?
HTTP (HyperText Transfer Protocol)
클라이언트와 서버에서 자원을 주고받을 때 사용하는 통신 체계
- HyperText : 한 문서에서 다른 문서로 접근할 수 있는 텍스트(링크)
- Protocol : 컴퓨터 간 원활한 통신을 위해, 지키기로 한 약속, 체계
- TCP/IP 기준, 애플리케이션 레이어에 속하는 프로토콜
HTTP Request method
- 서버 쪽 데이터에 특정 행위 요청할 때 http 제공 메소드 이용
- 특징
- cacheable(캐싱): 캐시할 수 있는 http 응답으로, 나중에 재사용하기 위해 응답을 저장할 수 있음 (어디?)
- 브라우저, 서버 캐싱 나눠서 정리
- 모든 http 응답을 캐싱할 수 있는 것은 아님. 제약조건에 맞는 것만 캐싱가능
- idempotent(멱등성)
- 서버의 상태: 응답 코드, 객체 X → 서버 내의 현재 상태
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 멱등성을 가졌다고 말합니다.
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX exists DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted DELETE /idX/delete HTTP/1.1 -> Returns 404
- 종류
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원 전체 변경
- PATCH: 존재하는 자원의 일부 변경
- DELETE : 존재하는 자원에 대한 삭제
- REST API: http method를 활용한 것
응답 상태코드
: 특정 HTTP 요청이 성공적으로 완료되었는지 알려주는, 응답 상태코드
→ 이를 통해 에러처리함
- 200번대 : 성공응답
- 200(ok): 요청 성공
- 201(create): 요청 성공 → 결과로, 새로운 리소스 생성된 경우
- POST요청, PUT요청으로 나옴
- 300번대 : 리다이렉션 메시지
- 300(multiple choice): request에 대해 1개 이상의 응답이 있는 경우
- 304(not modified): 캐시 사용 목적으로 이용, response가 수정되지 않았음을 알려주고, 클라이언트는 response에 캐시된 버전을 계속 사용함
- 400번대 : 클라이언트 에러 응답
- 400(bad request): 서버가 request를 이해할 수 없는 경우
- 401(unauthorized): 인증이 되지않은 경우 (Authorization 헤더가 잘못된 경우)
미승인
- 403(forbidden): 인증은 됐지만, 해당 권한에 접근할 수 없는 경우
권한없음
- 404(not found): 잘못된 자원 요청 → 서버에 요청 자원이 없음
- 500번대 : 서버 에러 응답
- 500(internal server error): 처리방법이 정의되지 않은 경우 → 서버에서 처리하지 않은 에러
더 자세한 응답코드 정보는 여기에서(MDN) 볼 수 있음
문제점
- 평문 통신
암호화하지 않고, 작성한 내용 그대로 전송됨
TCP/IP는 도청가능한 네트워크(왜?)
→ 통신 경로 중에 메시지 볼 수 있음
- 통신 상대 확인하지 않음
request, response에서 통신 상대를 확인하지 않음.
즉, request 보낸 사람이 신뢰할 수 있는 클라이언트인지, 서버입장에선 알 수 없음.
→ 위장할 수 있음
- 완전성 보장할 수 없음
*완전성: 정보의 정확성
통신 중간에 request, response를 빼앗아 변조하는 중간자 공격을 당할 수 있음
→ 변조될 가능성 존재
이러한 점을 보완하기 위해, HTTPS 등장
HTTPS (HyperText Transfer Protocol Secure)
http에 암호화 프로토콜을 추가한 것
암호화 프로토콜(SSL)의 핵심은, 암호화
암호화 방법
- 대칭키(비밀키)
- 암호화, 복호화 할 때 동일한 키를 활용하는 방법
- 단점: 대칭키 전달 취약점 존재
서버, 클라이언트 동일키를 가지기 위해서, 키 생성한 곳에서 다른 곳으로 키를 전송해야함 → 탈취 위험
- 비대칭키(공개키)
- 암호화, 복호화 할 때 서로 다른 키 이용함
- 원리
- B 공개키/개인키 쌍 생성
- 공개키 공개(등록), 개인키는 본인이 소유
- A가 B의 공개키를 받아옴
- A가 B의 공개키를 사용해 데이터를 암호화
- 암호화된 데이터를 B에게 전송
- B는 암호화된 데이터를 B의 개인키로 복호화 (개인키는 B만 가지고 있기 때문에 B만 볼 수 있음)
- 단점: 대칭키에 비해 복잡하기 때문에, 속도가 느림 → 현재, 대칭키 + 비대칭키를 활용한 하이브리드 암호 시스템 사용

참고자료
- 해킹/보안 관련 자료사이트
- MDN
- 블로그
- 추가로 읽어볼 자료(깊은 내용)