【问题标题】:fetch works in Node.js and Deno but not in browser or Postmanfetch 适用于 Node.js 和 Deno,但不适用于浏览器或 Postman
【发布时间】:2022-08-14 02:42:18
【问题描述】:

在 Chrome 控制台中运行此代码时出现Unauthorized 错误(禁用网络安全并绕过 CSP),但它在 Node.js 和 Deno 和 Postman 中运行良好,返回预期的 JSON 对象。

Node.js 和 Deno 是否注入了一些标头以使其工作?

他们在做什么与浏览器的 fetch 不同?

我以为他们是一样的?

const profileId = \'foo\'; // not real values obviously
const sessionId = \'bar\';

getRelativesMetaData(profileId, sessionId).then(console.log);

async function getRelativesMetaData(myProfileId, sessionId) {
  const headers = {
    \'x-requested-with\': \'XMLHttpRequest\',
    \'Cookie\': `current-profile-id=${myProfileId}; sessionid=${sessionId}`
  };
  const url = `https://you.23andme.com/p/${myProfileId}/family/relatives/ajax/`;
  const resp = await fetch(url, { headers });
  const json = await resp.json();
  return json;
}
  • 恰恰相反:Cookieforbidden header names 之一,任何兼容的浏览器都不允许您在请求中设置此标头。这个限制不适用于像 Deno 和 Node 这样的环境,因为它们不是浏览器,而且在那里没有意义。
  • 此外,除非您在浏览器中从you.23andme.com 网页中运行此代码,否则也可能存在 COR 问题。

标签: node.js postman session-cookies fetch-api deno


【解决方案1】:

恰恰相反:Cookieforbidden header names 之一,任何兼容的浏览器都不允许您在请求中设置此标头。此限制不适用于 Deno 和 Node 等环境,因为它们不是浏览器,因此在那里没有意义。


也许您知道 23andMe 确实有一个 API — 但它是受限访问,这(我猜)这就是您想要简单地使用会话 cookie 来访问您的数据的原因(大概是在您使用的基于浏览器的 Web 应用程序中) '已经创建)。如果我对此的直觉是正确的,那么您可能会从使用 Deno/Node/etc 操作 proxy server 中受益。这样您就可以在浏览器应用程序中获取数据,而无需担心该环境中的身份验证限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多