javascript - 如何处理返回带有 "payload"的 JavaScript 的 JavaScript fetch() ?

标签 javascript fetch-api

我正在尝试使用 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/

相关文章:

javascript - 什么是 !!在javascript中?

javascript - 未捕获( promise )SyntaxError : Unexpected end of input

javascript - 具有 setInterval 功能的自动图像 slider 不起作用

javascript - 使用 Node.js 和 Socket.io 定位文件

javascript - jQuery:$.ajax() 重定向到其 URL 表单操作参数,而不是对表单操作执行 AJAX 请求

JavaScript 检查资源是否可以通过 fetch 访问

javascript - API Fetch 仅更新一项数据

javascript - fetch API 中的 request.mode 有什么意义,尤其是对于 cors?

javascript - fetch res.json 继续返回 Unresolved promise

javascript - 如何在 javascript 中解压缩 gzip 文件?