Using Fetch article translate to Korean

이 기능성의 종류는 전에 달성했었다 XHLHttpRequest 를 사용해서. Fetch 는 제공합니더 나은 대체를 그것은 더 쉽게 사용될 수 있습니다 다른 기술들로 부터 예를 들어 Service Workers. Fetch 는 물론 제공합니다 단일 논리적 공간을 정의하는데 다른 HTTP-관계 콘셉트를 예를들어 CORS 그리고 HTTP 대한 확장을.

노트는 fetch 가 상술하는데 다릅니다 대개는 두개의 방법이 나릅니다 진지하게 jQuery.ajax() 생각하자면.

  • fetch() 로 되돌려 받은 프라미스는 거절하지 않습니다 HTTP error 상태에서, 비록 그 응답이 HTTP 404 또는 500 일지라도. 그보다는 오히려, 그것은 평범하게 resolve 할 것입니다. (ok 상태를 false 로 설정과 함께), 그리고 그것은 오직 거절됩니다 네트워크의 실패 혹은 만약 어떤것들이든 방해된다면 완료로 부터의 요청을.
  • 기본적으로, fetch 는 보내거나 어떤 쿠키들도 보내지 않습니다 서버로부터, 인증되지 않는 요청의 결과들이 만약 그 사이트에서 의지 한다면 유저 세션을 유지하고 있을때(보내는것은 쿠키들을, 증명서들이 시작 옵션으로 무조건 설정되어있어야 합니다.)

fetch 요청 만들기

기본적인 fetch 요청은 매우 간단하다 설정하기에. 코드를 따라가보세요:

var myImage = document.querySelector('img');

fetch('flowers.jpg').then(function(response) {
return response.blob();
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});

이것이 우리가 이미지를 네트워크를 통해 fetching 하고 그리고 그것을 <img> 속성에 삽입하는 것입니다.가장 쉬운 fetch()의 사용은 1개의 인자값을 가집니다 — 해당하는 자원의 경로를 당신이 원하는 fetch — 그리고 되돌려줍니다 응답을 초함한 프라미스를(Response object).

이것은 그저 코스의 HTTP response 입니다, 실제의 이미지가 아닌. 응답에서의 이미지 바디 컨텐츠를 적출하는것은, 우리는 사용합니다 blob() 함수를(Body mixin 에 정의 되어있는 것은 시행됩니다 요청과 응답 오브젝트 둘다.)

Note: 그 바디의 mixin 는 물론 비슷한 바디 컨텐츠의 다른 종류를 적출하는 메소드를 가지고 있습니다; 자세한 정보는 Body section 보세요.

objectURL 은 그리고 적줄된 Blob 에 의하여 만들어졌습니다, 그것은 그 후 img 안에 삽입됩니다.

Fetch 요청들은 제어됩니다 컨텐츠 보안 정책 보다 더 그 자원들에 connect-src 관리하는것 보다는 자원들에 대한 지시가 ???

요청의 옵션을 제공합니다.

그 fetch() 메소드는 선택적으로 수락할 수 있습니다 두번째 인자를, init 오브젝트는 허락할 수 있습니다 많은 설정의 조작을.

var myHeaders = new Headers();

var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };

fetch('flowers.jpg', myInit).then(function(response) {
return response.blob();
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});

사용할 수 있는 전체 옵션과 자세한 정보를 원하시면 fetch() 를 보세요.

요청을 인증서를 포함하여 함께 전송합니다.

브라우저들이 요청을 인증서가 포함된것을 함께 전송이 원인이 될때 교차하는 원인의 call 에도 불구하고 더합니다 credentials: ‘include’ 를 init 의 오브젝트에 fetch() 메소드를 통하여.

fetch('https://example.com', {
credentials: 'include'
})

만약 당신이 오직 인증서만 보내기 원한다면 만약 그 요청 URL 은 같은 근원의 스크립트를 호출할것입니다, credentials: ‘same-orgin’.

// The calling script is on the origin 'https://example.com'

fetch('https://example.com', {
credentials: 'same-origin'
})

대신하는것을 보장하는 브라우저는 포함되지 않습니다 해당하는 요청 안에 인증서가, credentials: ‘omit’.

fetch('https://example.com', {
credentials: 'omit'
})

fetch가 성공적인지 확인하기

fetch() 프라미스는 아마 거절될것입니다 타입에러와 함께 네트워크 에러가 마주쳐지거나 CORS 가 서버쪽에서 잘못 구성됬을때, 비록 이것이 보통 권한 문제 혹은 비슷한 것으로 의미된다. — 404 는 네트워크 에러에 구성되지 않는다, 예를들어. 성곡적인 fetch() 의 정확한 체크는 아마 포함할 것이다 promise 의 resolved 를 체크하는것을, 그후 체킹한 Response.ok 의 속성이 참의 값을 가질것이다. 이 코드는 보여줄 것이다 이렇게:

fetch('flowers.jpg').then(function(response) {
if(response.ok) {
return response.blob();
}
throw new Error('Network response was not ok.');
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
}).catch(function(error) {
console.log('There has been a problem with your fetch operation: ', error.message);
});

당신이 소지하고 있는 요청의 오브젝트를 배송.

자원에 대한 지나가는 경로를 대신에 당신이 원하는 요청을 fetch() 안에 요청합니다, 당신은 Request() 생성자를 사용하여 요청 오브젝트를 만들고, 넘겨 줍니다 fetch() 메소드 인자에:

var myHeaders = new Headers();

var myInit = { method: 'GET',
headers: myHeaders,
mode: 'cors',
cache: 'default' };

var myRequest = new Request('flowers.jpg', myInit);

fetch(myRequest).then(function(response) {
return response.blob();
}).then(function(myBlob) {
var objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});

request() 는 받아드립니다 정확하게 같은 파라미터를 fetch() 메소드에 대해서. 기존 요청 객체를 전달하여 해당 요청 객체의 복사본을 만들 수 있습니다.

var anotherRequest = new Request(myRequest, myInit);

이것은 유용합니다, 요청과 응답의 몸통을 하나만 사용하는것에 대해서. 복사를 만드는것은 이 당신에게 허용된 것처럼 사용할 수 있게 만듭니다 요청/응답을 다시, init 옵션이 희망할때 까지 바뀌는 동안. 이 복사한 것은 만들어져야만 합니다 그 몸통이 읽기 전에, 그리고 복사에 대한 몸통을 읽는것은 아마 물론 표시 할것입니다 본래의 요청안에 읽는것에 대하여.

Note: 복사본을 만드는 Clone() 메소드가 존재합니다. 복사를 만드는 두개의 메소드는 실패될것입니다, 만약 본래의 요청과 응답의 몸통이 이미 읽혀졌으면, 하지만 복사된 응답 또는 요청의 몸통이 읽혀진 것은 야기시키지 않을 것입니다. 본래의 읽는것을 표기한것에 대하여.

헤더

그 헤더의 인터페이스는 허락해줄 것입니다 Headers() 생성자를 통한 그들이 소지하고 있는 헤더들의 오브젝트를 만드는것을. 헤더들의 오브젝트는 이름을 값으로 하는 간단한 multi-map 입니다.

var content = "Hello World";
var myHeaders = new Headers();
myHeaders.append("Content-Type", "text/plain");
myHeaders.append("Content-Length", content.length.toString());
myHeaders.append("X-Custom-Header", "ProcessThisImmediately");

같은것은 달성될 수 있습니다 배열의 지나가는 배열 또는 오브젝트를 생성자로 순환하는 것에 의해:

myHeaders = new Headers({
"Content-Type": "text/plain",
"Content-Length": content.length.toString(),
"X-Custom-Header": "ProcessThisImmediately",
});

내용을 질의하고 검색할 수 있습니다:

console.log(myHeaders.has("Content-Type")); // true
console.log(myHeaders.has("Set-Cookie")); // false
myHeaders.set("Content-Type", "text/html");
myHeaders.append("X-Custom-Header", "AnotherValue");

console.log(myHeaders.get("Content-Length")); // 11
console.log(myHeaders.get("X-Custom-Header")); // ["ProcessThisImmediately", "AnotherValue"]

myHeaders.delete("X-Custom-Header");
console.log(myHeaders.get("X-Custom-Header")); // [ ]

그것들의 연산자의 일부는 오직 ServiceWorkers 안에서 유용합니다, 하지만 그들은 헤더들을 다루는것에 대한 좋은 API 를 제공합니다.

헤더의 메소드들에 모든것을 던집니다 TypeError 를 만약 헤더이름이 사용되었다면 이용가능한 HTTP 헤더 이름이 아닙니다. 그 변화의 연산자들은 던질것입니다 TypeError를 만약 불변의 Guard 가 있다면(아래를 보세요). 그 외에는 조용히 실패합니다. 예를들어:

var myResponse = Response.error();
try {
myResponse.headers.set("Origin", "http://mybank.com");
} catch(e) {
console.log("Cannot pretend to be a bank!");
}

전에 당신이 그것을 미래에 처리할지 안할지 그 컨텐츠 타입이 맞는지 확인하는 헤더들을 사용하는 좋은 예제 입니다. 예를들어:

fetch(myRequest).then(function(response) {
var contentType = response.headers.get("content-type");
if(contentType && contentType.includes("application/json")) {
return response.json();
}
throw new TypeError("Oops, we haven't got JSON!");
})
.then(function(json) { /* process your JSON further */ })
.catch(function(error) { console.log(error); });

Guard

헤더는 요청의 대한 전송과 응답에 대한 받음을 보낼 수 있습니다, 그리고 어떤 정보가 할 수 있는지 그리고 변할 수 있는지, 헤더의 오브젝트가 guard 의 속성을 가지고 있는지 많은 제한사항을 가지고 있습니다. 이것은 웹에 대하여 노출 되지 않았습니다, 하지만 이것은 영향을 미칩니다 어떤 변하는 연산자가 허락되는지 그 헤더의 오브젝트에 대해서.

가능한 guard values 들:

  • none: 기본값.
  • request: 요청 (Request.headers)에서 얻은 헤더 객체에 대한 guard.
  • request-no-cors : Request.mode no-cors로 생성 된 요청에서 얻은 헤더 객체를 보호합니다.
  • response: 응답(Request.headers)에서 얻은 헤더 객체에 대한 guard.
  • immutable: 주로 ServiceWorkers에 사용됩니다. 헤더 객체를 읽기 전용으로 렌더링합니다.

Note: 고정된 메소드인 error() 는 그저 error 응답을 반환합니다. 비슷하게, redirect()는 명시된 URL의 재전송한 요청의 결과를 반환합니다. 이것들은 물론 오직 Service Workers 에 관련있습니다.

Body

두개의 응답과 요청은 아마 바디 데이터를 함유합니다. 바디는 이러한 유형중 하나의 인스턴스입니다.

그 Body mixin 정의합니다 바디로부터 추출한 이러한 메소드들을(두개의 요청과 응답으로 부터 시행된것). 이것들은 모두 promise 를 반환합니다. 그것은 결국 해결됩니다 실제의 컨텐츠와 함께.

이것은 논문이 아닌 데이터의 용법을 만듭니다 XHR 보다 더 쉽게.

요청의 몸통들은 본문 매개변수를 전달하여 설정할 수 있습니다. :

var form = new FormData(document.getElementById('login-form'));
fetch("/login", {
method: "POST",
body: form
});

두개의 요청과 응답은 (그리고 fetch() 함수의 증축된 것들으로 부터), 콘텐츠 종류에 지능적인 결정을 시도할것입니다. 요청은 물론 자동적으로 Content-Type 헤더를 설정합니다.

Feature detection

Fetch API 는 지원할 수 있습니다 발견되는 것을 Headers, Request, Response 또는 fetch ()의 존재 여부 확인 합니다 Window 혹은 Worker 범위 안에 의해서. 예를들어:

if (self.fetch) {
// run my fetch request here
} else {
// do something with XMLHttpRequest?
}
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.