Hyper Text Transfer Protocol의 줄인 말로 서버와 클라이언트 간에 데이터를 주고 받는 프로토콜
즉 인터넷에서 데이터를 주고 받을 수 있는 프로토콜
Request, Response 구조를 가지며 클라이언트가 Request(요청)을 보내면 서버가 이에 해당하는 결과에 대한 Response(응답)을 한다.
각각의 요청이 독립적으로 여겨진다는 특징으로 서버는 클라이언트의 상태를 유지하지 않는다.
이를 위해서 쿠키나 세션, 토큰방식의 OAuth, JWT가 사용된다.
어떤 서버에서 요청이 와도 동일하게 처리가 가능하다
서버 1이든 서버 100 이든 클라이언트는 이전에 자신이 요청한 정보를 저장해놓고 해당 메세지를 함께 보내는 것이다.
그렇기 때문에 서버 100은 클라이언트가 이전에 어떤 요청을 하였는지 다른 서버를 조회할 필요없이 보낸 요청에 대한 응답만 하면 된다.
이렇기 때문에 서버의 개수에 비례해서 성능을 올릴 수 있고 하나의 서버에서 장애가 발생하면 다른 서버로 대체 가능하다.
HTTP의 기본은 연결을 유지하지 않는다.
클라이언트가 서버에게 리소를 요청(Request)을 하고 응답(Response)를 받으면 연결을 끊어버린다.
이 경우 서버의 부담을 줄일 수 있지만 요청할 때마다 연결을 해야하는 오버헤드 비용이 발생한다.
이를 위해 헤더의 Connection: keep-alive 속성으로 지속적인 연결 상태를 유지할 수 있다. HTTP1.1 부턴 지속적 연결 상태가 기본이다.
계속해서 메소드를 호출해도 리소스를 변경하지 않는다는 뜻으로 GET 메소드가 안전하다고 볼 수 있음
계속해서 메소드를 호출해도 결과가 똑같다는 뜻으로 GET, PUT, DELETE는 멱등하다고 볼 수 있고 POST, PATHCH는 멱등하다고 볼 수 없다.
캐싱을 해서 데이터를 효율적으로 가져올 수 있다는 뜻으로 GET, HEAD, POST, PATCH가 캐시가 가능하지만 실제로는 GET, HEAD만 주로 캐싱이 쓰인다고 한다.
요청이 수신되어 처리중
요청 정상 처리
요청을 완료하려면 추가 행동이 필요
클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
서버오류, 서버가 요청을 처리하지 못함
HTTP의 보안이 강화된 버전으로 HTTP에 SSL이라는 기술을 더해서 데이터를 암호화 하는 기술
암호화는 기본적으로 어떤 정보를 아무나 읽지 못하도록 키를 가지고 특정 알고리즘을 돌려 정보를 숨기는 것
공개키는 모두가 볼 수 있는 키이며 비밀키는 소유자만이 가지고 있는 키로 암/복호화에 사용됨
서버와 클라이언트가 암호화/복호화에 동일한 비밀키를 사용하는 방식으로 키를 공유하는데 어려움은 있으나 속도가 빨라짐
서버와 클라이언트가 암/복호화에 각각 다른 비밀키를 사용하는 방식으로 공개키를 통해서 암호화 하고 비밀키를 통해서 복호화 함
클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업들로 클라이언트가 서버에 요청을 해서 인증기관이 발급한 인증서를 받은 뒤 인증기관의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증하며 인증기관의 공개키로 복호화 되는 자료는 오직 인증기관의 비밀키로 암호화한 경우밖에 없기 때문에 복호화 되면 신뢰할 만한 것이다.
HTTPS는 대칭키 암호화를 사용함