Hypertext Transfer Protocol
HTTP는 웹 서버와 브라우저가 파일 등의 정보를 송수신하는데 사용하는 클라이언트와 서버 프로토콜이다.
- 1989년 영국의 컴퓨터 과학자인 팀 버너스 리(Tim Berners-Lee)가 월드 와이드 웹(World Wide Web)을 고안하면서 설계한 프로토콜이다.
- 주로 HTML 문서를 주고 받는데 사용한다.
- HTML(HyperText Markup Language) : 웹을 이루는 구성 요소이다.
웹 페이지가 어떤 구조로 이루어져 있는지 브라우저가 알 수 있도록 하는 마크업 언어!! ❌프로그래밍 언어 아님❌
- HyperText : 웹 페이지를 다른 페이지로 연경하는 링크이다.
- Markup Language: 태그 같은 수많은 요소를 사용 <h1>이런 태그</h1>
하는 언어
- Protocol : 규칙이다. 특정 기기 간에 데이터를 주고받기 위해 정의되었다.
“나는 이렇게 줄게! 넌 저렇게 받아! 난 너가 준거 요렇게 받을게!
✅ HTTP는 client-server 모델을 따르는 protocol이다.
client-server protocol
- 클라이언트(client) : 요청을 보내는 쪽 (일반적으로 웹 브라우저)
- 엔지니어들과 자신들의 애플리케이션을 디버그하는 웹 개발자들이 사용하는 프로그램들은 예외
- 서버(server) : 요청을 받는 쪽 (일반적으로 데이터를 보내는 원격지 컴퓨터)
- 요청(requests) : 클라이언트에 의해 전송되는 메시지
- 응답(responses) : 서버가 요청에 대해 전송하는 메시지
- 웹 브라우저(Client)가 HTTP(규칙)를 통해 웹 서버(Server)로부터 웹 페이지나 그림 정보를 요청한다.
- 웹 서버(Server)는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다.
HTTP 프로토콜로 데이터를 주고받기 위해서는 아래와 같이 요청(Request)을 보내고 응답(Response)을 받아야 한다.
URL이란?
- protocol : 규약 http, ftp, telnet
- host : 웹 서버의 위치
- IP 주소 : 도메인 아니면 Ip 주소를 쓴다. ex) 127.0.0.1
- domain name : host name의 일부분, 보통 도메인으로 불림 ex) example.com, kr, net
- port : USB 포트를 생각해보자. 연결되는 gate로 컴퓨터와 다른 컴퓨터와 서로 연결되는 통로
- 표준 HTTP 포트 80, HTTPS는 443이다. 표준 포트를 사용할 경우 보통 생략한다.
- resource path : 파일 위치다. 자원에 대해 웹서버에서 추상화한 경로다. 없으면 표시되지 않는다.
- 매개변수(query or parameter) : 웹 서버에서 보내는 추가 파라메터
- fragment identifier : 부분 식별자
HTTP 프로토콜의 특징
- HTTP 프로토콜은 stateless 프로토콜이다. 상태가 없지만 세션은 있다.
- 상태가 없다 : 상태를 저장하지 않는다. 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다.
- 서버는 세션같이 별도 추가 정보를 관리하지 않아도 된다.
- 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능상의 이점
- 일반적으로 네트워크 프로토콜은 TCP/IP 프로토콜 위에서 동작한다. HTTP 기본 포트는 80번이다.
프록스(proxy)란 무엇인가?
- 웹 브라우저와 서버 사이에 수많은 컴퓨터와 머신이 HTTP 메시지를 이어 받고 전달하는데 그 중 애플리케이션 계층에서 동작하는 것이다.
- 서버 대신 클라이언트의 요청을 중계 받는다.
- 요청과 응답 사이에는 여러 개체들이 있다. 게이트웨이 또는 캐시 역할을 하는 프록시 등
Application Layer protocol
응용 계층(Application layer)은 [OSI 7계층]에서 7계층을 담당하는 녀석으로 HTTP가 속해있다.
- 실제로 브라우저와 요청을 처리하는 서버 사이에 좀 더 많은 컴퓨터들이 존재한다.(라우터, 모뎀 등)
- 웹의 계층적 설계 덕분에 이들은 네트워크와 전송 계층 내로 숨겨지고 HTTP는 애플리케이션 계층의 최상위에 있다.
HTTP 요청 메소드(Http Request Methods)
URL을 통해 서버에 특정 데이터를 요청할 수 있다.
요청하는 데이터에 특정 동작을 수행해야 할 때 Http Request Methods를 이용한다.
- GET : 존재하는 자원에 대한 요청
- POST : 새로운 자원을 생성
- PUT : 존재하는 자원에 대한 변경
- DELETE : 존재하는 자원에 대한 삭제
- 기타 요청 메소드 HEAD, OPTIONS(CORS에서 사용) 등이 있다.
HTTP 상태 코드(HTTP Status Code)
서버에서 설정해주는 응답(Response) 정보이다.
이 상태 코드로 에러 처리를 할 수 있다.
2XX 성공을 의미함
- 200 : GET 요청에 대한 성공
- 204 : No Content 성공하긴 했는데 응답 본문에 데이터가 없음
- 205 : Reset Content 성공했으나 클라이언트의 화면을 새로고침하도록 권고함
- 206 : Partial Content 성공했으나 일부 범위의 데이터만 반환함
3XX 리다이렉션
클라이언트가 이전 주소로 데이터를 요청함 서버에서 새 URL로 리다이렉트를 유도하는 경우
- 301 : Moved Permanently 요청한 자원이 새 URL에 존재함
- 303 : See Other 요청한 자원이 임시 주소에 존재함
- 304 : Not Modified 요청한 자원이 변경되지 않아서 클라이언트에서 캐싱된 자원을 사용하도록 권고함
- ETag와 같은 정보를 활용하여 변경 여부를 확인함
4XX 클라이언트 에러
클라이언트의 코드가 잘못됐거나 유효하지 않은 자원을 요청했거나 권한이 잘못된 경우
- 400 : Bad Request 잘못된 요청
- 401 : Unauthorized 권한 없음 Authorization 헤더가 잘못된 경우
- 402 : 이 응답 코드는 나중에 사용될 것을 대비해 예약됨. 지금 사용되고 있지 않음.
- 403 : Forbidden 서버에서 해당 자원에 대해 접근 금지
- 404 : Method Not Allowed 요청한 자원이 서버에 없음
5XX 서버 에러
서버쪽에서 오류가 난 경우
- 501 : Not Implemented 요청 동작에 대해 서버가 수행할 수 없음
- 503 : Service Unavailable 서버가 과부하 또는 유지 보수로 내려간 경우
참고
프런트엔드 개발자가 알아야하는 HTTP 프로토콜 Part 1
HTTP 개요
HTTP 상태 코드