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

无法在标头中获取没有NO-COR的POST

简烨烁
2023-03-14

在提出这样的要求时:

return fetch(
            'http://localhost:8000/login',
            {   method: 'POST',
                headers: new Headers(
                   {"Content-Type": "application/json",
                    "Accept":"application/json"}
                ),

                body: JSON.stringify(
                   {'name': 'Tom', 'password': 'Soyer'}
                )
             }
           ).then( response => { console.log(response);})
            .catch(err => console.log(err))

请求使用方法选项而不是POST运行。仅在添加模式时:“no-cors”请求变为POST:

return fetch(
            'http://localhost:8000/login',
            {   method: 'POST',
                mode: 'no-cors',
                headers: new Headers(
                   {"Content-Type": "application/json",
                    "Accept":"application/json"}
                ),
                body: JSON.stringify(
                   {'name': 'Tom', 'password': 'Soyer'}
                )
             }
           ).then( response => { console.log(response);})
            .catch(err => console.log(err))

但响应不确定(即使网络响应状态为200):{type:“不透明”,url:“”,status:0,ok:false,statusText:“”…}我想是因为

Content-Type头的唯一允许值是:application/x-www-form-urlencoded multipart/form-data text/plain

在此介绍https://developer.mozilla.org/en-us/docs/web/http/access_control_cors

有没有什么方法可以用FETCH来实现POST json数据?

共有2个答案

徐飞龙
2023-03-14

使用non-cors时,所有标头必须是有效的simple-Headers。限定为简单标头的content-type标头的唯一有效值是:

headers: [
  ['Content-Type', 'application/x-www-form-urlencoded'],
  ['Content-Type', 'multipart/form-data'],
  ['Content-Type', 'text/plain'],
]

意外情况例外:

headers: [
  ['Content-Type', 'application/csp-report'],
  ['Content-Type', 'application/expect-ct-report+json'],
  ['Content-Type', 'application/xss-auditor-report'],
  ['Content-Type', 'application/ocsp-request'],
]
  • 简单标头
  • CORS-协议-例外
朱起运
2023-03-14

您正在发送的自定义content-type头会使您的请求被预置,这意味着将在实际的POST请求之前发送一个选项请求,其中包含一些关于将要发送的POST请求的元数据。

您的服务器需要准备好处理此选项请求。您还没有指定服务器写入的内容,但例如,通过express,您可以注册一个中间件,该中间件拦截所有“options”请求,设置access-control-allow-origin:*access-control-allow-headers:content-type头,并以200响应。

如果您可以使用'content-type':'text/plain'头发出请求,那么这将解决您的问题。或者,您可以使用完全绕过XHR的东西,如JSONP。

 类似资料:
  • 当我只想要列的一个子集(例如总共20列中的第4和第7列)时,如何使用Pandas读取.csv文件(没有头)?我似乎无法执行

  • 在尝试HTTP头时,我在服务器上设置了无法访问java脚本。下面是我的代码。好心的一些帮助我解决这个问题。 Java脚本: 谢谢,我需要在java脚本上读取头值。

  • 我正在使用Pygame制作一个简单的游戏。我已经将Pygame显示屏嵌入到Tkinter窗口中。 现在,当我执行这个-时,它会打印位置,但当我移动鼠标时,它不会打印更新后的鼠标位置。它仍然会打印上一个鼠标位置,除非我单击显示器。 在将Pyplay显示嵌入到Tkinter窗口之前,同一程序不会发生这种情况。所以,事件系统似乎工作不正常。 有人建议,您可以检测Tkinter中的事件,然后将它们转发给P

  • 我正在尝试使用Apache Flume使用JMS消息(IBM Websphere MQ)并将数据存储到HDFS。在阅读消息时,我只能看到消息的正文,而不能看到消息的标题内容。 是否可以使用Apache Flume读取带有头属性的jms消息? 我的配置:

  • 问题内容: 我需要获取所有Django请求标头。根据我的阅读,Django只是将所有内容与大量其他数据一起转储到变量中。获取客户端发送到我的Django应用程序的所有标头的最佳方法是什么? 我将使用它们来构建httplib请求。 问题答案: 根据文档,这 是“包含所有可用HTTP标头的标准Python词典”。如果要获取所有标头,则可以简单地遍历字典。 代码的哪一部分执行此操作取决于你的确切要求。有

  • 问题内容: 我是python的新手,使用Python Flask并生成REST API服务。 我想检查发送给客户端的授权标头。 但是我找不到在flask中获取HTTP标头的方法。 感谢获得HTTP标头授权的任何帮助。 问题答案: 行为就像字典一样,因此你也可以像使用任何字典一样获取标头: