HTTP 통신 과정
웹에서 HTTP 요청 응답 확인하려면 F12 (개발자 도구) 눌러서 확인하면 된다.
요청 프로토콜
요청 헤더
[요청 메소드] [공백] [요청 URI] [공백] [HTTP 버전]
요청 방식
- GET : 클라이언트가 서버로부터 문서를 읽어오려 할 때
- POST : 클라이언트가 서버에게 어떤 정보를 전송할 때
- PUT : 클라이언트가 서버에 특정 자원을 업로드 할 때
URI의 구조
scheme ://host[:port][/path][?query]
ex) http ://IP 주소 :포트 /폴더이름 /파일 이름
ftp ://IP 주소 :포트 /파일 이름
응답 프로토콜
응답 프로토콜 구조
[HTTP 버전] [공백] [상태 코드] [공백] [상태 문구]
상태 코드 종류
- 200 : 클라이언트의 요청이 성공 (OK)
- 403 : 클라이언트가 권한이 없는 페이지를 요청 (Forbidden)
- 404 : 클라이언트가 서버에 없는 페이지를 요청 (Not Found)
- 405 : 클라이언트가 메소드를 안지켰을때 (method not allowed)
- 500 : 서버의 일부가 멈췄거나 설정 오류 발생 (Internal Server Error)
- 503 : 최대 Session 수를 초과했을 때 (Service Unavailable) -> 갑자기 사용자가 폭주 할때
HTTP 헤더 포맷
요청 헤더 포맷
Request Line |
일반, 요청, 항목 헤더 |
공백 |
body |
응답 헤더 포맷
Status Line |
일반, 응답, 항목 헤더 |
공백 |
body |
일반 헤더
- Content-Length : 메세지 바디 길이를 나타낼 때
- Content-Type : 메세지 바디에 들어있는 컨텐츠 종류 ex) image, jpg
요청 헤더
- cookie : 서버로부터 받은 쿠키를 다시 서버에게 보내주는 역할 -> 웹 브라우저에 저장
- Host : 요청된 URL에 나타난 호스트명을 상세하게 표시
- User-Agent : 클라이언트 프로그램에 대한 식별 가능 정보를 제공
응답 헤더
- Server : 사용하고 있는 웹 서버의 소프트웨어에 대한 정보를 포함
- Set-Cookie : 쿠키를 생성하고 브라우저에게 보낼 때 사용 -> 해당 쿠기 값을 브라우저가 서버에게 다시 보낼 때 사용
암호화, 복호화
암호화 : 평문을 인가된 사용자가 아니면 알아볼 수 없는 글자로 바꾸는 것
복호화 : 암호화한 암호문을 평문으로 바꾸는 것
암호화 종류
단방향 암호화 (해시 알고리즘)
: 평문을 암호문으로 바꾸는 데 복호화할 수 없는 것
- MD5, SHA
- 무결성 검증을 하기 위해서 사용 (파일에 잘못된 게 없다라는 것을 검증)
- 고객 민감 정보를 저장할 때 사용 (패스워드)
양방향 암호화
: 암호화 복호화 다 가능한 것
- 대칭키 : 암호화할 때 키와 복호화할 때 키가 같은 것, 빠름
- 비대칭키(공개키) : 암호화할 때 키와 복호화할 때 키가 다른 것, 상대적으로 느림
모든 사람은 본인의 공개키과 사설키를 가질 수 있다.
- 공개키는 요청하는 누구에게든 공유한다.
- 사설키는 누구에게도 공유하지 않는다.
- 공개키를 암호화했으면 같은 쌍의 사설키로만 복호화할 수 있다.
- 사설키를 암호화했으면 같은 쌍의 공개키로만 복호화할 수 있다.
인증서
공개키 기반 암호화 방식은 안전하게 통신할 수 없다.
왜? -> 누구의 공개키인지 모르기 때문에... 중간에 누가 가로챈 후 자신의 공개키를 줄 수도 있기 때문에!
그래서 인증서가 필요하다 !!
제 3의 신뢰할 수 있는 기관(kisa, yessign)이 도메인 주소와 해당 주소의 공개키를 인증해주는 것
인증된 인증서에 공개키를 넣어서 보내고, 받는 쪽에서는 이 인증서가 맞는지 yessign 등에서 확인한다.
도메인 말고 ip 주소로 입력하게 되면 '주의 요함' 이라고 표시 된다.
=> 인증서 확인이 안 되기 때문에!
=> 인증은 도메인으로 했는데 IP주소로 왔기 때문에
HTTPS 사용
랜덤하게 주고 받은 값을 이용해서 대칭키를 생성하고,
주고 받을 데이터를 대칭키로 암복호화하면서 통신한다.
대칭키가 잘 생성이 된 건지 확인하기 위해서 단방향 암호화를 사용한다. (해시 알고리즘
'CS' 카테고리의 다른 글
웹 서버, 웹 어플리케이션 서버(WAS), DB 서버 연동 실습 (0) | 2024.11.25 |
---|---|
시스템 아키텍처 / 부하 분산 실습 (HAProxy) (0) | 2024.11.22 |
[네트워크] DNS 서버, 포트 포워딩, 웹 서버 nginx (0) | 2024.11.21 |
[네트워크] IP 주소, 서브넷 마스크 / 네트워크 설정 (0) | 2024.11.21 |
[네트워크] 네트워크란? / 네트워크의 분류, 통신 방식 / 네트워크 프로토콜 (0) | 2024.11.20 |