fetch
fetch
AJAX - 서버에서 추가 정보를 비동기적으로 가져올 수 있게 해주는 포괄적인 기술을 의미함. (새로 고침 없이)
AJAX 이외에도 서버에 네트워크 요청을 보내고 정보를 받아올 수 있는 다양한 방법이 존재하는데 그 중 하나인 fetch
에 대해서 알아본다.
1 | let promise = fetch(url, [options]); |
- url : 접근하고자 하는 url
- options : 선택 매개변수, method나 header 등을 지정할 수 있다.
options
에 아무것도 넘기지 않으면 GET
으로 동작한다.
서버에서 응답 헤더를 받자마자 fetch
호출 시 반환받은 promise
가 내장 클래스 Response
의 인스턴스와 함께 이행 상태가 된다. 아직 본문이 도착하기 전이지만, 개발자는 응답 헤더를 보고 요청이 성공적으로 처리되었는지 아닌지를 확인할 수 있다.
HTTP 응답 상태는 프로퍼티를 사용해 확인할 수 있다.
- status - HTTP 상태 코드 값 (ex. 200)
- ok - 불린 값, HTTP 상태 코드가 200 과 299 사이일 경우
ture
1 | let response = awiat fetch(url); |
response
에는 프라미스를 기반으로 하는 다양한 메서드가 있다. 이 메서드를 사용하면 다양한 형태의 응답 본문을 처리할 수 있다.
response.text()
- 응답을 읽고 텍스트로 반환해 줌.response.json()
- 응답을 읽고 JSON으로 파싱해 줌response.formData()
- 응답을FormData
객체 형태로 반환함.response.blob()
- 응답을Blob
(타입이 있는 바이너리 데이터) 형태로 반환 함.response.arrayBuffer()
- 응답을ArrayBuffer
(바이너리 데이터를 로우 레벨 형식으로 표현한 것)- 이 외에도
respose.body
가 있는데 청크 단위로 읽을 수 있게 해준다.
1 | let url = |
본문을 읽을 때 사용되는 메서드는 딱 하나만 사용할 수 있다.
response.text()
를 사용해 응답을 얻었다면 본문의 콘텐츠는 모두 처리된 상태이기 때문에response.json()
은 동작하지 않는다.
응답 헤더
응답 헤더는 response.headers
에 맵과 유사한 형태로 저장된다.
1 | let response = await fetch( |
요청 헤더
headers
옵션을 사용하면 fetch
에 요청 헤더를 ㅅ걸정할 수 있다.
1 | let response = fetch(protectedUrl, { |
POST 요청
GET
요청 이외의 요청을 보내려면 추가 옵션을 설정해야 한다.
- method - ex.POST
- body - 요청 본문, 다음 중 하나여야 한다.
- 문자열(ex. JSON 문자열)
FormData
객체 -form/multipart
Blob
이나BufferSource
- 바이너리 데이터 전송을 위해 사용됨
1 | let user = { |
본문이 문자열일 때는 Content-Type - text/plain;charset-UTF-8
이 기본으로 설정됨. 하지만 위에 예시에서는 JSON 이기 때문에 따로 설정을 해주었다.