How to use an API with opaque response?(如何使用响应不透明的API?)
问题描述
我尝试这样使用Cat Facts API:
const URL = "https://catfact.ninja/fact?limit=1" // In browser, this displays the JSON
fetch(URL).then(response=> {
console.log(response);
return response.json();
}
);
但我收到了
跨域请求被阻止:同源策略不允许读取https://catfact.ninja/fact?limit=1处的远程资源。(原因:CORS标头‘Access-Control-Allow-Origin’丢失)。TypeError:尝试提取资源时出现NetworkError。
所以在尝试后
fetch(URL, {mode:'no-cors'})
.then(response=> {
console.log(response);
return response.json();
}
);
我现在得到
返回{type:"不透明",url:"",重定向:false,status:0,ok:false,statusText:"",Headers:Headers,Body:null,bodyUsed:False}
语法错误:JSON.parse:JSON数据的第1行第1列出现意外的数据结尾
我从here了解到我将无法按预期使用此接口。但如果是,它的用途是什么,打算如何使用(this信息不说明问题)?
推荐答案
不透明响应是您看不到其内容的响应。它们本身没有任何用处。
设置mode: 'no-cors'
是一个声明,表示您不需要读取响应(或执行任何其他需要CORS权限的操作)。
例如,JavaScript可能正在发送要由服务器记录的分析数据。
模式的好处是,它允许您发送数据,而不会收到JS控制台中报告的异常(如果有人打开它,这将(A)看起来很糟糕,(B)控制台中会堆满垃圾,使您很难找到真正的错误)。
如果需要访问响应,请不要设置mode: 'no-cors'
。如果是跨域请求,则需要使用some other technique to bypass the Same Origin Policy。
side:"Access-Control-Allow-Origin": "*"
是响应头。请勿将其放在请求中。它不会做任何有用的事情,并且可能会将简单的请求转换为预飞行的请求。
这篇关于如何使用响应不透明的API?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用响应不透明的API?
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01