HyperText Transfer Protocol의 약자로 웹에서 정보를 교환하기 위한 프로토콜(규약) 이다. 클라이언트와 서버 간에 데이터를 전송하는 법을 정의한다.
HTTP는 stateless protocol
, 즉 비상태 프로토콜이다. 이는 서버가 이전에 전송된 정보를 기억하지 않는다는 의미로, 각각의 요청이 별개로 처리되며 이전 요청과 다음 요청 사이에 연결고리가 없다. 이러한 특징으로 인해 서버는 세션과 같은 별도의 추가정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있다는 이점을 가지게 된다.
HTTP는 기본적으로 클라이언트-서버 모델을 따른다. 클라이언트는 HTTP 요청(request)을 생성하고, 서버는 요청된 정보에 대한 응답(response)을 제공한다.
Uniform Resource Locator의 약자로, 서버의 자원 위치를 가리키는 표준적인 방식이다. 인터넷에서 웹페이지, 이미지 등을 특정 위치에 연결하거나 가져오는 데에 사용되는 주소다.
URL의 기본구조는 다음과 같다.
protocol://hostname:port/path?query_string#fragment_id
- protocol(프로토콜) : 자원에 접근하기 위해 사용되는 방법을 지정. HTTP, HTTPS, FTP 등이 있다.
- hostname(호스트이름) : 자원이 위치한 서버의 도메인 이름 또는 IP 주소
- port(포트) : 서버에서 자원에 접근하기 위해 특정 포트를 지정한다. 대부분의 HTTP 통신에서는 생략되며 기본적으로 HTTP는 80포트를 사용한다.
- path(경로) : 서버에서 자원의 특정 위치를 지정한다. 종종 폴더와 파일 구조를 통해 나타내진다.
- Query String(쿼리 문자열) : 웹 서버에 추가 정보를 제공하는 데 사용된다. 보통
key=value
쌍의 형태로&
기호로 구분된다. 쿼리 문자열은?
기호로 시작한다.- Fragment ID(프래그먼트 아이디) : 웹 페이지 내의 특정 부분을 가리키는 데 사용된다.
#
기호로 시작한다.
url을 사용하여 서버에 특정 데이터를 요청할 때 특정 동작을 수행하고 싶다면, HTTP 요청 메서드 (HTTP Request Methods)를 사용하면 된다.
POST vs PUT
POST
와PUT
은 둘다 리소스를 생성하는데 사용될 수 있다. 그러나 둘의 리소스를 생성하는 방식과 의미는 서로 다르다.
- POST : POST를 이용하여 새 리소스를 생성하면, 서버는 새로운 리소스의 위치(URI)를 결정한다. 클라이언트는 생성할 데이터만 제공하고, 서버는 그 데이터를 사용하여 새로운 리소스를 만들고, 그 위치를 클라이언트에게 알려준다.
- PUT : PUT을 이용하여 새 리소스를 생성하면, 클라이언트는 새 리소스가 생성되어야 할 정확한 위치(URI)를 서버에 알려주어야 한다. 만약 그 위치에 이미 리소스가 존재한다면, 그 리소스는 클라이언트가 제공한 데이터로 교체된다. 아무것도 없다면, 새로운 리소스가 해당 위치에 생성된다.
즉 "생성" 이라는 개념이 두 메서드에 모두 적용되지만, POST는 "이 데이터를 가져가서 처리해주세요" 와 같은 요청을 보내는 개념이고, PUT은 "이 데이터를 이 특정 위치에 저장해주세요" 와 같은 개념이다.
HTTP 상태코드(Status Code)는 요청을 받은 서버가 설정해주는 응답(response)정보이다. 코드는 3자리의 숫자로 서버가 클라이언트의 요청을 어떻게 처리했는지를 나타낸다.
1xx (정보 응답) : 요청을 받았고, 프로세스를 계속 진행 중임을 나타낸다.
2xx (성공) : 요청이 성공적으로 수신, 이해, 수락되었음을 나타낸다.
3xx (리다이렉션 완료) : 대부분 클라이언트가 이전 서버주소로 리소스를 요청할 때 나오는 코드이다.
4xx (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
5xx (서버 오류) : 서버가 유효한 요청을 처리하는데 실패했음을 나타낸다.