使用 fetch 时文本响应为空
Text response is empty when using fetch
以下代码:
fetch('http://localhost:8080/root/1487171054127/k_query_bearer_token', {
mode: 'no-cors', credentials: 'include'
})
.then(function (response) {
return response.text();
})
.then(function (text) {
console.log('Request successful', text.length);
})
.catch(function (error) {
log('Request failed', error)
});
正在输出:
Request successful 0
如果我使用 curl:
curl 'http://localhost:8080/root/1487171054127/k_query_bearer_token' \
-H 'Cookie: JSESSIONID=CviS9IK8pcsqADdP-m0MRXX_AvUqfzjJPwk1Yytf.ee16d0a01ad5'
我得到一个文本形式的令牌(长度!= 0)。
如果我通过以下方式输出响应 header:
curl 'http://localhost:8080/root/1487171054127/k_query_bearer_token'
-H 'Cookie: JSESSIONID=CviS9IK8pcsqADdP-m0MRXX_AvUqfzjJPwk1Yytf.ee16d0a01ad5'
--head
我得到:
HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Undertow/1
Server: JBoss-EAP/7
Content-Type: text/plain
Content-Length: 1730
Date: Wed, 15 Feb 2017 16:17:00 GMT
为什么我通过 fetch 收不到任何文字?
移除 mode: 'no-cors'
.
当您使用 no-cors
模式时,您明确指定您想要 “opaque response”。
您的脚本无法访问不透明响应的任何属性——实际上您所能做的就是缓存它。 no-cors
模式基本上只有在使用 Service Worker 进行缓存时才有用。
如果您的脚本使用 no-cors
模式的原因是因为 cross-origin 对服务器的请求否则将无法工作,正确的解决方案是更新 server-side 代码发送 Access-Control-Allow-Origin
响应 header 和其他 CORS header——如果您有权访问服务器,请执行此操作——否则,使用像 https://cors-anywhere.herokuapp.com/.[= 这样的代理17=]
以下代码:
fetch('http://localhost:8080/root/1487171054127/k_query_bearer_token', {
mode: 'no-cors', credentials: 'include'
})
.then(function (response) {
return response.text();
})
.then(function (text) {
console.log('Request successful', text.length);
})
.catch(function (error) {
log('Request failed', error)
});
正在输出:
Request successful 0
如果我使用 curl:
curl 'http://localhost:8080/root/1487171054127/k_query_bearer_token' \
-H 'Cookie: JSESSIONID=CviS9IK8pcsqADdP-m0MRXX_AvUqfzjJPwk1Yytf.ee16d0a01ad5'
我得到一个文本形式的令牌(长度!= 0)。
如果我通过以下方式输出响应 header:
curl 'http://localhost:8080/root/1487171054127/k_query_bearer_token'
-H 'Cookie: JSESSIONID=CviS9IK8pcsqADdP-m0MRXX_AvUqfzjJPwk1Yytf.ee16d0a01ad5'
--head
我得到:
HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Undertow/1
Server: JBoss-EAP/7
Content-Type: text/plain
Content-Length: 1730
Date: Wed, 15 Feb 2017 16:17:00 GMT
为什么我通过 fetch 收不到任何文字?
移除 mode: 'no-cors'
.
当您使用 no-cors
模式时,您明确指定您想要 “opaque response”。
您的脚本无法访问不透明响应的任何属性——实际上您所能做的就是缓存它。 no-cors
模式基本上只有在使用 Service Worker 进行缓存时才有用。
如果您的脚本使用 no-cors
模式的原因是因为 cross-origin 对服务器的请求否则将无法工作,正确的解决方案是更新 server-side 代码发送 Access-Control-Allow-Origin
响应 header 和其他 CORS header——如果您有权访问服务器,请执行此操作——否则,使用像 https://cors-anywhere.herokuapp.com/.[= 这样的代理17=]