HTTP
목차
- HTTP란 뭔가요?
- HTTP 프로토콜의 가장 큰 특징은 뭔가요?
- URL은 뭔가요?
- HTTP/1.1 과 HTTP/2.0의 차이는 뭔가요?
HTTPS는 HTTP랑 뭐가 다른가요?
심화) 공개키 (비대칭키) 방식이 뭔가요?- http의 get,post 비교
- http의 status code
1. HTTP란 뭔가요?
- Hypertext Transfer Protocol(HTTP)
- 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때까지 대기하는 전통적인 클라이언트-서버 모델 ->
인터넷에서 데이터를 주고 받을 수 있는 프로토콜
*프로토콜
: 서로 다른 기기들 간의 데이터 교환을 원활하게 수행할 수 있도록 표준화 시켜 놓은 통신 규약(=규칙
)
2. HTTP 프로토콜의 가장 큰 특징은 뭔가요?
- 무상태 프로토콜
- 서버가 두 요청 간에 어떤한 데이터(상태)도
유지하지 않음
(상태를 유지하기 위해 cookie/sesssion 사용)
클라이언트 서버 구조(req, res 구조)
- 클라이언트는 서버에
요청(req)
을 보내고 응답을 대기 - 서버가 요청에 대한 결과를 만들어
응답(res)
- 클라이언트는 서버에
비 연결성
HTTP에서 실제로 요청을 주고받을 때만 연결을 유지, 응답을 주고나면 TCP/IP 연결을 끊음 =>최소한의 자원으로 서버를 유지
함
HTTP 지속 연결(Persistent Connections)로 문제를 해결함- 단순함, 확장 가능
3. URL은 뭔가요?
Unuform Resource Locators(인터넷에서 자원 위치)
웹에서 게시된 어떤 자원을 찾기 위해서 browsers에 의해 사용되는 매커니즘(= 웹페이지를 찾기 위한 주소
)
구조 : 프로토콜 :// “ip,도메인,포트” 주소 / 자원 위치(디렉토리/파일/파일형 등)
예시)
https | :// | zinnli.github.io | / | About/ |
---|---|---|---|---|
프로토콜 | “ip,도메인,포트”등의 주소 | 자원위치(디렉토리/파일/파일형 등) |
4. HTTP/1.1 과 HTTP/2.0의 차이는 뭔가요?
HTTP/1.1
: HTTP의 표준
- 중요한 성능 최적화를 도입함
HTTP/2
: HTTP/1.1의 성능향상
차이점
바이너리 프레이밍 계층
: http 메세지가 클라이언트와 서버 사이에 어떻게 캡슐화되고 전송되는지 관여함(http 메세지를 독립적인 개별 프레임 단위로 나누어 상호 배치하여 전송 및 목적지에 도착했을 때 재조립함)스트림, 메세지 및 프레임
- 스트림 : 생성된 하나의 커넥션 내 데이터의 양방향 흐름(하나 또는 그 이상의 메세지를 보유함)
- 메세지 : 프레임의 완전한 시퀀스(집합)
- 프레임 : HTTP/2에서 사용되는 커뮤니케이션 단위 중 가장 작은 단위 -> 어떤 스트림에 속하는지 나타내는 정보를 가진 프레임 헤더를 지님
요청 및 응답 다중화
: HTTP 메세지를 독립된 프레임으로 세분화 하여 재조립 허용(HTTP/1.1의 경우 하나의 연결 당 하나의 메세지)스트림 우선순위 지정
: 우선 순위 지정 트리를 구성하여 통신 가능출처당 하나의 연결
: 바이너리 프레이밍의 역할로 여러개의 TCP 연결이 필요 없어짐서버 푸시
: 클라이언트의 단일 요청에도 여러개의 응답을 보낼 수 있는 기능(불필요한 통신량을 줄여줌)헤더 압축
: 요청 및 응답 헤더의 메타 데이터를 압축함 => 개별 http 메세지의 용량이 줄어듬
1,3,5는 비슷한 결의 내용들
5. HTTPS는 HTTP랑 뭐가 다른가요?
도메인의 자물쇠로 확인 가능
HTTP
: 보안 취약 / 속도 빠름
HTTPS
(Hypertext Transfer Protocol Secure)
HTTP에 데이터 암호화가 추가
된 프로토콜
- 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 암호화를 지원함(SSL 인증서 사용)=> 안전한 데이터 교환 / 속도 느림(현재는 차이 거의 x)
- 인증서를 발급하고 유지하기 위한 추가 비용
상황에 따라 HTTP/HTTPS 사용
심화) 공개키 (비대칭키) 방식이 뭔가요?
HTTPS에서 사용하는 암호화 방식
대칭키 암호화
- 콜라이언트와 서버가 동일 키를 사용해 암호화/복호화를 진행
- 키 노출되면 위험 / 연산 속도는 빠름
비대칭키 암호화
- 암호화, 복호화 시 다른 키를 사용함- 1 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용(ex 키 A로 암호화 / 키 B로 복호화 == 한 쌍)
- 키가 노출되어도 비교적 안전 / 연산속도는 느림
공개키
: 모두에게 공개가능한 키
개인키
: 나만 가지고 알고 있어야 하는 키
HTTPS는 handshaking 과정에서 비대칭키를 사용하여 인증서(대칭키)를 보내고 이 인증서에 대칭키를 안전하게 받았다면 연결 이후 대칭키를 사용해서 전달함
handshaking 과정(https)
- 클라이언트) 서버에 접속해서 말을 검(Client Hello)(= 브라우저는 일부의 정보를 이 단계에서 전달함)
- 서버) 위의 인사에 응답, 다음 정보를 클라이언트에게 제공(Server Hello)
- 클라이언트) 브라우저는 서버의 SSL 인증서가 믿을만한지 확인
- 클라이언트) 브라우저는 자신이 생성한 난수와 서버의 난수를 사용하여 premaster secret 생성(= 공개키로 암호화하여 서버로 전송)
- 서버) 서버는 사이트의 비밀키로 브라우저가 보낸 premaster secret 값을 복호화 함(= 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화함)
- 서버/클라이언트) SSL handshaking 종료, HTTPS 통신 시작
++SSL 인증서 기능
- 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장
- SSL 통신에 사용할 공개키를 클라이언트에게 제공
6. http의 get,post 비교
- 둘 다 브라우저가 서버에 요청하기 위해 사용되는 메소드
- GET 방식
- 요청을 전송할 때 필요한 데이터를 쿼리스트링을 통해 전송함
- 불필요한 요청을 제한하기 위해 요청이 캐시될 수 있음(동일한 요청 발생 시)
- GET 요청은 브라우저 히스토리에 남음
- GET 요청은 길이 제한이 있음
- GET 요청은 중요한 정보를 다루면 안됨(보안)
- POST 방식
- 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송
- 길이의 제한 없이 전송 가능
- POST 요청은 캐시되지 않음
- POST 요청은 브라우저 히스토리에 남지않음
- 요청 헤더의 Content-Type에 요청 데이터 타입을 표시해야함
7. http의 status code
1xx(정보)
: 요청을 받았으며 프로세스를 계속 진행합니다.- 서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미
2xx(성공)
: 요청을 성공적으로 받았으며 인식했고 수용하였습니다.- 200 OK : 요청이 성공적으로 되었습니다. 정보는 요청에 따른 응답으로 반환됩니다.
3xx(리다이렉션)
: 요청 완료를 위해 추가 작업 조치가 필요합니다.4xx(클라이언트 오류)
: 요청의 문법이 잘못되었거나 요청을 처리할 수 없습니다.- 404 Not Found : 서버는 요청받은 리소스를 찾을 수 없습니다
5xx(서버 오류)
: 서버가 명백히 유효한 요청에 대한 충족을 실패했습니다.
*230109 추가
- http의 get,post 비교
- http의 status code
출처
HTTP/1.1과 HTTP/2의 차이점
메세지
HTTP와 HTTPS의 차이점
대칭키 비대칭키
handshaking
SSL 통신 과정
http get, post
http status code