HTTP(Hypertext Transfer protocol)은 하이퍼텍스트 전송 프로토콜이다. 쉽게 말해 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 웹에서 이루어지는 모든 데이터 교환의 기초이자 client-server 프로토콜이기도 하다.
HTTP는
request
와response
로 이루어진 프로토콜이라고 생각하면 쉽다.
client가 server에게request(요청)
을 보내고, server는 이에 대한response(응답)
을 보내준다.
HTTPS(Hypertext transfer protocol secure)은 HTTP에 보안이 추가된 것이다.
그러나 HTTPS는 SSL
이나 TLS
같은 서로 보안 관계가 형성된 client와 server끼리 데이터를 안전하게 주고받기 때문에, 제 3자가 그 내용을 쉽게 볼 수 없다.
1989
HTTP가 처음 등장함1994
HTTPs가 등장1997
HTTP v1 (HTTP, HTTPS로 사용 가능)2015
HTTP v2 (HTTPS)2019~
HTTP v3 (HTTPS)
1. HTTP를 사용하면 처음에 TCP connection이 생긴다. TCP connection으로 Client와 Server가 연결된다.
2. Client는 자신이 어떤 행동을 원하는지에 대한 request method와 server의 특정 문서, 특정 경로에 있는 데이터를 받기를 원하는지에 대한 URL, Header 등의 다양한 정보를 포함해서 server에게 요청한다.
3. server는 client로부터 받은 요청에 해당하는 내용과 요청이 성공했는지, 실패했는지를 알려주기 위한 상태코드를 함께 묶어서 응답으로 보낸다.
이후 더이상 보낼 데이터가 없다면 TCP connection이 닫혀서 종료된다.
위에서 server에서 client에게 response를 보낼 때에는 status code를 함께 포함해서 보낸다고 했다. status code는 특정 HTTP 요청이 성공적으로 완료되었는지에 대해 알려준다. 3자리의 숫자로 이루어져 있으며 이를 통해 server에서 어떻게 처리했는지를 알 수 있다.
1xx
: 어떤 정보를 제공하는 응답
2xx
: 서버에서 성공적으로 처리되었을 때 보내줌
3xx
: 리다이렉트. 경로를 알려줄 때 씀
4xx
: Client 에러. Client가 잘못된 방식으로 요청했을 때 발생하는 에러
5xx
: Server 에러. Server에서 예상치 못한 에러가 발생했을 때 나타나는 에러
100
: 임시적인 응답. 지금까지 상태가 괜찮음을 알려줌102
: server가 요청을 수신했고, 이를 처리하는 중임을 알려줌103
: server가 응답을 준비하는 동안 사용자가 사전 로딩을 시작할 수 있도록 함200
: 요청이 성공적임을 알려줌GET
: 리소스를 가져왔고, 메시지 바디에 전송됨HEAD
: 개체 헤더가 메시지 바디에 있음POST
: 리소스가 명시하는 행동의 결과가 메시지 바디에 전송됨 TRACE
: server가 요청받은 메시지가 메시지 바디에 포함되어 있음201
: 요청이 성공적이었고, 그 결과 새로운 리소스가 생성됨을 알림204
: 요청은 처리했으나 요청에 대해 보내줄 데이터가 없음을 알림301
: 요청한 리소스의 URI가 변경되었음을 알림302
: 요청한 리소스의 URI가 일시적으로 변경되었음을 알림 (즉, 당분간 임시적으로 다른 URI를 쓴다는 것)303
: Client가 요청한 리소스를 다른 URI에서 GET요청을 통해 얻어야 할 때, server가 client에 직접 보내는 응답 307
: Client가 요청한 리소스가 다른 URI에 있을 때 알림308
: 리소스가 이제 HTTP응답 헤더의 Location에 명시된 영구히 다른 URI에 위치하고 있음을 알림 400
: 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음을 의미401
: 비인증(로그인 안했을 때) 상태에서 요청할 때 알림403
: Client가 해당 컨텐츠에 접근할 권리가 없을 때 알림404
: Server가 요청받은 리소스를 찾을 수 없을 때, 즉 브라우저에서는 알려지지 않은 URL을 의미함405
: 요청한 메서드는 server에서 알고 있지만, 제거되었고 사용할 수 없을 때 의미함 409
: 요청이 현재 server의 상태와 충돌될 때 보냄500
: Server가 처리 방법을 모를 때 502
: Server가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안, 잘못된 응답을 수신했음을 의미함503
: Server가 요청을 처리할 준비가 되지 않았을 때 보냄 (보통 유지보수를 위해 작동이 중단되었거나, 과부하가 걸렸을 때)