브라우저의 사용자 인터페이스는 표준 명세가 없음에도 수 년간 서로의 장점을 모방하며 현재에 이르게 되었다.
- 항상 요청과 응답으로 이루어 진다.
- 메세지를 달라고 request하면 message를 response한다
- 없으면 없다고 응답한다.
- 요청을 무시한다면 오류가 난다.
→ 요청을 받은후 응답하지 않는다면, 오류발생
HTTP 응답 상태 코드는 특정 HTTP 요청이 성공적으로 완료되었는지 알려준다.
상태코드는 3자리 숫자로 만들어져 있으며 첫번째 자리는 1에서 5까지 제공된다.
No. 상태코드 설명 1 1XX
(100
–199
)Informational responses (정보) :
요청을 받았으며 프로세스를 계속 진행한다.2 2XX
(200
–299
)Successful responses (성공) :
요청을 성공적으로 받았으며 인식했고 수용했다.3 3XX
(300
–399
)Redirects (리다이렉션) :
요청 완료를 위해 추가 작업 조치가 필요하다.4 4XX
(400
–499
)Client errors (클라이언트 오류) :
요청의 문법이 잘못되었거나 요청을 처리할 수 없다.5 5XX
(500
–599
)Server errors (서버 오류) :
서버가 명백히 유효한 요청에 대해 충족을 실패했다.→ 첫번째 자리가 4, 5인 경우 정상적인 상황이 아니라는 것을 나타내기 때문에 관리자가 즉시 알아야 하는 정보이다.
Status Code Meaning 200 요청 성공 304 요청에 대한 응답이 수정되지 않는다(Cache) 403 컨텐츠에 접근할 권한이 없다 404 요청받은 리소스를 사용할 수 없다 500 서버가 처리할 수 없는 요청
![]() | - 기본적으로 http요청은 헤더와 바디를 가진다 → 응답도 마찬가지로 헤더와 바디를 가진다. - 바디는 보통 비어있다. 하지만, 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다. |
Stateless | Connectionless |
---|---|
http의 각 요청은 모두 독립적이다![]() | 한번의 요청에는 한번의 응답을 한다.![]() |
http 매 요청은 독립적이기 때문에 state라는 것이 없다.![]() | 응답이후 연결이 끊겨, 더이상 응답할 수 없다.![]() |
헷갈리는 나를 위한 한줄기의 빛과 같은 스타벅스 메뉴주문 예시.
API | Http(Protocol) |
---|---|
메뉴판 | - 키오스크 - 배달 - 사이렌오더 |
프로토콜의 종류는 다양하다
결론 :
백엔드에서 서버를 만들고 거기에 클라이언트가 request하기 위해 설명서(API)를 쓰고, 그걸 연결하는 방법 중에 하나가 HTTP인것.
var xhr = new XMLHttpRequest(); xhr.open('get', 'http://52.78.213.9:3000/messages'); // 요청의 상태 변화를 추적합니다. xhr.onreadystatechange = function() { if (xhr.readyState !== 4) return; // readyState 4: 완료 if (xhr.status === 200) { //status 200: 성공 console.log(xhr.responseText); // 서버로부터 온 응답 } else { console.log('에러: ' + xhr.status); // 요청 도중 에러 발생 } } xhr.send(); // 요청 전송
$.get('http://52.78.213.9:3000/messages', function(response) { // response: 서버로부터 온 응답 });
fetch('http://52.78.213.9:3000/messages') .then(function(response) { return response.json(); }) .then(function(json) { // json 형태로 전달받은 서버로부터의 응답 })
fetch('http://example.com') .then(res => res.json()) .then(data => { console.log(data); }) .catch(err => { console.error(err); });
XMLHttpRequest
function reqListener() { console.log(this.responseText); } var oReq = new XMLHttpRequest(); oReq.addEventListener('load', reqListener); oReq.open('GET', 'http://www.example.org/example.txt'); oReq.send();
jQuery ajax
$.ajax({ url: 'http://example.com', method: 'GET', dataType: 'json' }) .done(function(json) { console.log(json) }) .fail(function(xhr, status, errorThrown) { }) .always(function(xhr, status) { console.log('요청완료') });