我正在尝试使用 JavaScript 的现有后端代码:
fetch(someURL)
.then(res => res.json())
.then(data => console.log(data));
但是,我注意到响应 header 说
content-type: application/x-javascript
所以它不是 JSON,.json()
调用会失败,返回的数据似乎是文本并包含:
for(;;);{"_some_var":1,"payload":{ ... // many properties and values here
发生了什么以及获取返回值的正确方法是什么?
最佳答案
似乎是一种防止 JSON 劫持的安全措施
<script src="https://example.com/resource.json"></script>
与此相关的情况(ES5/2011 之前)的安全漏洞是,请求将与远程域的任何现有 cookie 一起发送,并且响应可能包含敏感数据。该循环使响应在上述上下文中不可用。
普遍的共识是安全客户端在解析之前删除 token
fetch(someUrl)
.then((res) => (res.ok ? res.text() : Promise.reject(res)))
.then((almostJson) =>
JSON.parse(almostJSON.replace(/^(while|for)\(.*?\);/, ""))
)
.then(console.log);
this post中有一些不错的相关讨论.
关于javascript - 如何处理返回带有 "payload"的 JavaScript 的 JavaScript fetch() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74721063/