当前位置: 首页 > 知识库问答 >
问题:

fetch()不发送头?

岳君之
2023-03-14

我正在从浏览器发送如下POST请求:

fetch(serverEndpoint, {
    method: 'POST',
    mode: 'no-cors', // this is to prevent browser from sending 'OPTIONS' method request first
    redirect: 'follow',
    headers: new Headers({
            'Content-Type': 'text/plain',
            'X-My-Custom-Header': 'value-v',
            'Authorization': 'Bearer ' + token,
    }),
    body: companyName
})

当请求到达我的后端时,它不包含x-my-custom-headerauthorization头。

我的后端是用于Firebase的Google Cloud函数(基本上只是node.jsendpoint),看起来如下所示:

exports.createCompany = functions.https.onRequest((req, res) => {
    let headers = ['Headers: ']
    for (let header in req.headers) {
        headers.push(`${header} : ${req.headers[header]}`)
    }
    console.log(headers)
    ...
}

Google Cloud for Firebase函数的控制台日志不包含任何x-my-custom-headerauthorization头。

怎么啦?

共有1个答案

徐瑞
2023-03-14

同一来源策略限制网页可以从另一个来源向资源发送的请求种类。

no-cors模式中,浏览器仅限于发送“简单”请求--那些仅具有安全列表方法和安全列表头的请求。

若要发送具有授权X-my-custom-header等标头的跨源请求,您必须放弃no-cors模式,并支持飞行前请求(选项)。

区分“简单”和“非简单”请求是出于历史原因。Web页面总是可以通过各种方式(例如创建和提交表单)执行一些跨源请求,因此当Web浏览器引入了发送跨源请求的原则性方式(跨源资源共享,或CORS)时,就决定这样的“简单”请求可以免于预先选项检查。

 类似资料:
  • 我有这个问题,其中由于某种原因,我不能发送数据到另一个PHP脚本与POST通过API。 我已经检查了其他解决方案并清理了我的代码,但它仍然无法工作。 也许我错过了什么。 这是我的密码: 印刷品: 数组(0){} 我还测试了在PHP中解析Javascript读取中显示的解决方案,但它没有解决问题。我仍然没有在我的PHP脚本中获得POST数据。

  • 问题内容: 我有一个nodejs应用程序,它可以处理用户的请求并接收我要代理到内部API服务的cookie。如何通过使用节点获取来解决这个问题? 请不要提供超级代理。 问题答案: 您应该能够通过在请求的标头中设置cookie来传递cookie:

  • 本文向大家介绍HTTP fetch发送2次请求的原因?相关面试题,主要包含被问及HTTP fetch发送2次请求的原因?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: fetch发送post请求的时候,总是发送2次,第一次状态码是204,第二次才成功? 原因很简单,因为你用fetch的post请求的时候,导致fetch 第一次发送了一个Options请求,询问服务器是否支持修改的请求头,如

  • 我正在使用PHP rest API将数据从JS客户机发布到PHP8服务器。我正在使用JS方法。当使用时,formdata被发送到PHP的全局$_post中,但是由于我需要更新数据,我不得不使用。不知何故,Google Chrome没有将格式数据发送到服务器,我也不知道为什么。有人知道原因吗?

  • 问题内容: 由于某种原因,我无法将字符“ 3”写入页面上的输入元素。 这段代码: 导致在登录输入中写入“ 1245” …有人可以帮忙吗?我使用python 2.7,最新的chrome和最新的chromedriver 编辑: 也不管用。 -字符串中仅缺少“ 3” … 起作用的是 正如安德森(Andersson)在下文中建议的那样,但这不是解决方案。 我在Google搜索框中进行了尝试,并且遇到了相同

  • 我有一个主干模型,我正试图销毁它,但没有随请求发送任何参数,因此服务器返回一个“Delete 404 not found”错误。 我承认我的结构有点奇怪,因为我正在根据项目是否已经在列表中创建/销毁它们。 销毁前