fetch란?
fetch()는 최신 AJAX 요청 문법으로 서버로부터 데이터를 요청하는 API이다.
fetch의 기본 문법
let promise = fetch(url, [options])
- url – 접근하고자 하는 URL
- options – 선택 매개변수, method나 header 등을 지정할 수 있다.
options에 아무것도 넘기지 않으면 요청은 GET 메서드로 진행되어 url로부터 콘텐츠가 다운로드된다.
fetch()를 호출하면 브라우저는 네트워크 요청을 보내고 프로미스가 반환된다.
fetch(url, [options]).then(callback).catch(callback);
프로미스가 반환되기 때문에 fetch 요청 후에 .then()에서 응답(response) 객체를 받고 catch에서 요청에 대한 에러를 처리할 수 있다.
fetch 응답(response)의 두 단계
1. 서버에서 응답 헤더를 받자마자 fetch 호출 시 반환받은 프로미스가 내장 클래스 Response의 인스턴스와 함께 이행(fullfilled) 상태가 된다.
이 단계에서 개발자는 응답 헤더를 보고 요청이 성공으로 처리되었는지 아닌지를 응답프로 퍼티인 status와 ok를 사용해 확인할 수 있다.
- status: HTTP 상태코드
- ok: Boolean 값, HTTP 상태 코드가 200가 299 사이일 경우 true
2. 프로미스를 기반으로 하는 다양한 메서드를 호출해 응답 본문을 받는다. 아래는 response 객체에서 값을 볼 수 있게 해주는 5가지 메서드들이다.
- response.text(): 응답을 읽고 텍스트로 반환한다.
- response.json(): 응답은 JSON 형태로 파싱 한다.
- response.formData(): 응답을 FormData 객체 형태로 반환한다.
- response.blob(): 응답을 Blob(타입이 있는 바이너리 데이터)로 반환한다. (주로 이미지나 파일을 다룬다)
- response.arrayBuffer(): 응답을 ArrayBuffer(바이너리 데이터를 로우 레벨 형식으로 표현한 것) 형태로 반환한다. (주로 이미지나 파일을 다룬다)
*본문을 읽을 때 사용되는 메서드는 딱 하나만 사용이 가능하다. 연속으로 사용할 수 없다.
응답 헤더
응답 헤더는 response.headers에 map과 유사한 형태로 저장된다. 이 메서드를 사용하면 헤더 일부만 추출하거나 헤더 전체를 순회할 수 있고 append, delete, entries, get, has, keys, set, values 메서드를 사용할 수 있다.
요청 헤더
headers 옵션을 사용하면 fetch에 요청 헤더를 작성할 수 있다. headers에 다양한 헤더 정보가 담긴 객체를 넘기게 된다. 단 아래 목록은 금지된 헤더로 headers를 사용해 설정할 수 없다.
- Accept-Charset, Accept-Encoding
- Access-Control-Request-Headers
- Access-Control-Request-Method
- Connection
- Content-Length
- Cookie, Cookie2
- Date
- DNT
- Expect
- Host
- Keep-Alive
- Origin
- Referer
- TE
- Trailer
- Transfer-Encoding
- Upgrade
- Via
- Proxy-*
- Sec-*
Post 요청
Get 이외의 요청을 보내려면 추가 options를 사용해야 한다.
method
HTTP 메서드 (GET, POST 등)
body
요청 본문이다. 문자열, FormData객체, Blob / BufferSource 등 중에서 하나여야 한다. 대부분은 JSON을 요청 본문에 실어 보내게 된다. 본문을 보낼 때 주의할 점은 요청 본문에 맞게 Content-Type 헤더를 제대로 설정해 주어야 한다. 기본 설정은 text/plain;charset=UTF-8이다.
reference
ko.javascript.info/fetch#ref-208
www.zerocho.com/category/HTML&DOM/post/595b4bc97cafe885540c0c1c
'웹개발 > javascript' 카테고리의 다른 글
자바스크립트의 비동기 처리 기본 1 (0) | 2021.08.07 |
---|---|
localStorage & sessionStorage (0) | 2021.01.11 |
자바스크립트 async & await (0) | 2021.01.08 |
프라미스 Promise 란 무엇인가? (0) | 2021.01.07 |
자바스크립트의 비동기처리 & 콜백 함수 (0) | 2021.01.07 |