하이퍼텍스트 문서를 교환하기위한 Application Layer 프로토콜.
즉, 웹 서버와 클라이언트 간의 데이터를 주고받기 위해 만들어놓은 통신 규약이다.
Cookie
와 Session
을 사용한다.)암호화가 되지 않은 텍스트를 전송하는 프로토콜이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
--> 이걸 해결하기 위한 프로토콜이 HTTPS
!
클라이언트
: 서버에게 요청을 보내는 리소스 사용자
ex) 웹 브라우저, 모바일 애플리케이션, IoT 등
서버
: 클라이언트에게 요청에 대한 응답을 제공하는 리소스 관리자
클라이언트(웹 브라우저, 모바일 등)가 브라우저를 통해서 어떠한 서비스를 URI
를 통해 서버에 요청(Request)
하면 서버에서는 해당 요청에 대한 결과를 응답(Response)
하는 형태
1) TCP connection
TCP 연결은 요청을 보내거나 응답을 받는데 사용된다. 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다.
2) HTTP 메시지를 전송
GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
3) 서버에 의해 전송된 응답을 읽음
HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
<!DOCTYPE html... (here comes the 29769 bytes of the requested web page)
4) TCP connections을 close 하거나 다른 요청들을 위해 재사용
1) GET : 클라이언트가 서버에 리소스를 요청할 때 사용 (CRUD에서 Read)
2) POST : 클라이언트가 서버의 리소스를 새로 만들 때 사용 (CRUD 에서 Create)
3) PUT : 클라이언트가 서버의 리소스를 수정 할 때 사용 (CRUD에서 Update: 전체 수정)
4) DELETE: 클라이언트가 서버의 리소스를 삭제 할 때 사용 (CRUD에서 Delete)
그 외) PATCH, HEAD, OPTIONS, CONNECT, TRACE 등...
1xx(정보) : 요청을 받았으며 프로세스를 계속 진행함
2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용함
3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요
4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
5xx(서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패
HTTP에 데이터 암호화가 추가된 프로토콜
인터넷 상에서 정보를 암호화하는SSL 프로토콜
을 사용하여 클라이언트와 서버가 자원을 주고 받을 때 사용하는 통신 규약
공개키 암호화 방식을 SSL통신 절차에 적용을 하면 흐름은 다음과 같다.
https://developer.mozilla.org/ko/docs/Web/HTTP (HTTP)
https://surprisecomputer.tistory.com/54 (HTTP)
https://www.whatap.io/ko/blog/40/ (HTTP 상태 코드)
https://programmer93.tistory.com/38 (HTTP 메소드)
https://kingjakeu.github.io/study/2020/08/11/HTTP-HTTPS/ (HTTPS)