HTTP란?
- HTTP(HyperText Transfer Protocol)는 W3에서 클라이언트와 서버 간에 데이터를 주고받기 위한 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. 다양한 메서드(HTTP 동작)를 사용하여 특정 작업을 수행한다.
- 여기서 오가는 데이터는 텍스트 형식이며, 대표적 데이터 형식은 HTML, JSON 데이터, XML 등이 있다.
쉽게 말해 W3에서 클라이언트와 서버 사이의 데이터를 주고받기 위한 텍스트 기반 통신 규악이다.
HTTP 동작이란?
클라이언트 즉, 사용자가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.
- 요청(request) : 클라이언트 -> 서버
- 응답(response) : 서버 -> 클라이언트
- 요청 및 응답 메시지는 헤더와 본문으로 이루어져 있으며, 사람이 읽을 수 있는 형태로 표현된다.
참고로 HTTP 메서드는 그 자체로 기능을 가지고 있는것이 아닌 통신 약속으로 서버 내에서 메서드에 걸맞는 기능을 코드로 구현해두어야 한다.
HTTP 응답 코드
-
1XX : 요청을 받았으며 작업을 계속한다.
-
2XX : 이 클래스의 상태 코드는 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
-
3XX : 요청을 마치기 위해 클라이언트가 추가 동작을 취해야 한다.
- 304(수정되지 않음): 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않는다. 요청자가 마지막으로 페이지를 요청한 후 페이지가 변경되지 않으면 이 응답(If-Modified-Since HTTP 헤더라고 함)을 표시하도록 서버를 구성해야 한다.
-
4XX : 클라이언트에 오류가 있음을 나타낸다. (요청오류, 클라이언트 오류)
- 404(Not Found, 찾을 수 없음): 서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.
- 405(허용되지 않는 메소드): 요청에 지정된 방법을 사용할 수 없다. 예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우에 이 코드를 제공한다.
- 406(허용되지 않음): 요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없다.
-
5XX : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다. (응답오류, 서버 오류)
- 500(내부 서버 오류): 서버에 오류가 발생하여 요청을 수행할 수 없다.
- 501(구현되지 않음): 서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.
- 502 (Bad Gateway, 불량 게이트웨이): 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다.
주요 HTTP 메서드
-
GET
- 클라이언트에서 서버로 데이터를 요청 시 사용
- 주로 정보를 요청하는 데 사용되며, URL의 일부로 데이터를 전송
- 보통 캐시 가능하며, 브라우저에서는 주소 표시줄에 나타납니다.
-
POST
- 클라이언트에서 서버로 데이터를 전송 시 사용
- 주로 서버에 리소스를 제출하거나 업데이트할 때 사용되며, 데이터는 HTTP 본문에 담겨 전송
- 민감한 데이터 전송에 사용되며, 길이 제한이 없어 GET보다 많은 양의 데이터를 전송할 수 있음
-
PUT
- 클라이언트에서 서버로 데이터를 보내는데 사용
- 주로 리소스를 생성하거나 업데이트할 때 사용되며, 전송된 데이터는 요청된 리소스로 대체된다.
-
DELETE
- 클라이언트에서 서버로 데이터 삭제를 요청하는 데 사용
- 주로 지정된 리소스를 삭제하라는 의미이며, 실제로 리소스가 삭제되는 것은 서버에 따라 다르다.
JavaScript를 활용한 HTTP 통신방법
JavaScript로 HTTP 통신을 수행하는 방법에는 크게 3가지가 있다.
- XMLHttpRequest 객체를 활용 : 브라우저에서 제공하는 객체로 비동기적인 HTTP 요청을 생성하고 처리하는 데 사용
- fetch API 사용 : 웹 브라우저 환경에서 기본적으로 사용 가능한 API로 Promise를 반환하며, HTTP 요청 및 응답을 다룬다.
- axios 라이브러리 사용 : 브라우저 및 Node.js에서 비동기 HTTP 요청과 응답을 수행한다. Axios는 Promises를 기반으로 한 API를 제공하며, JSON 데이터를 자동으로 파싱하는 기능을 제공한다.
마치며
http 통신 규약에 대한 정보를 알아봤다.
rest api에 대한 정보와 ajax에 대해서도 정리해 볼 필요가 있겠다.
다음 포스팅은 JavaScript를 활용한 http 통신 방법을 정리한 글을 게시하도록 하겠다.