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

firefox/cors不允许在POST请求中使用application/json contentType?[副本]

冯文彬
2023-03-14

我想通过POST请求(使用ajax)发送一个json到我的服务器,但是每次尝试都被CORS阻止了。阅读为什么它被封锁一点帮助都没有。在某个时候,这里的一个评论声称,不允许有contentTypejson的POST请求(对不起,我找不到相关的帖子了)。所以我测试了一些东西。我写了以下php文件:

<?php 
header("Access-control-allow-origin: *");
header('Content-Type: application/json');
echo json_encode(["someVal" => true]);
?>

我在端口8081上运行了它。使用contentTypetext/plain发送ajaxPOST请求可以正常工作,但是application/jsonget被CORS阻止。

相关javascript:

$.ajax({
    url: "http://localhost:8081/someapi.php",
    contentType: "text/plain", //"application/json",
    method: "POST",
    crossDomain: true,
    data: {val: "asd"},
    success: function(data, status, xhr) {
        console.log("success");
    },
    error: function(data, status, xhr) {
        console.log("fail");
    }
});

为什么会这样呢?如果我不亲自测试,我从哪里得到这些信息?是否有可能通过POST请求发送json

共有1个答案

黄昊英
2023-03-14

具有内容类型的POST请求:如Fetch规范和MDN所述,text/plain算作简单请求。

有些请求不会触发CORS预飞行。在本文中,这些被称为“简单请求”,尽管Fetch规范(定义CORS)没有使用这个术语。“简单请求”是指满足以下所有条件的请求:允许的方法之一:

  • GET
  • POST

除了用户代理自动设置的头(例如,连接、用户代理或Fetch规范中定义为“禁止的头名称”的其他头),允许手动设置的头只有Fetch规范定义为“CORS safelisted请求头”的头,它们是:

  • 接受
  • 接受语言
  • 内容语言
  • 内容类型(但请注意以下附加要求)

内容类型标题的唯一允许值为:

  • 应用程序/x-www-form-urlencoded
  • 多部分/表单数据
  • 文本/纯文本

因此,如果发送内容类型为text/plain的POST请求,则运行的是“简单请求”。同时,使用application/json运行一个请求,该请求需要CORS飞行前请求,这意味着服务器需要使用正确的CORS头响应浏览器发送的选项请求。

您也可以使application/jsonw正常工作,但您需要从Web服务器返回正确的访问控制允许源、访问控制允许方法、访问控制允许标头,以响应浏览器发送的选项请求。

 类似资料:
  • 当我向我的api发出请求时,chrome会阻止我的请求,原因是内核。在我的firebase云函数上,我添加了response.set('access-control-allow-origin','*');(axios get中的xxxxxx只是隐藏请求url) 然后在我的angular应用程序中,我发出一个http post请求,如下所示 url与请求来自的域不同。 当我测试《邮差》里的一切,一切

  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的

  • 问题内容: 我打算使用Ajax将跨域请求发送到soap Web服务。Web服务的URL是:http://example1.asmx?op = GetVOD 我的代码: 在IIS 7服务器端,我已经将这些行添加到文件web.config中 当我在Chrome上运行客户端代码时,出现405错误: 有谁知道如何解决这个问题? 预先感谢 问题答案: 听起来像Web DAV正在阻碍。这是删除它的配置: ht

  • 该代码在我的本地开发环境中运行良好,但在我将其上载到服务器时,给出了一个异常。这个问题和这个问题的解决方案对我不起作用。 这是控制器。 这是routes文件中的相应条目。 这里是对URL的AJAX调用。 这就是示例测试用例的数据。 我如何克服这个错误,为什么这只发生在生产中? 值得注意的是,我在整个应用程序中还有其他对路由的AJAX调用,它们工作得很好。

  • 问题内容: 我遇到一个问题,我的图表(使用AJAX-POST-PHP)没有出现在亚马逊上 http://cdpmotest.s3-website.eu- central-1.amazonaws.com/ 它说(错误的方法405错误) 这是我的CORS Config: 这是我的脚本: 在localhost(WAMPServer)上工作正常 你能帮我吗? 问题答案: 该错误的直接原因与CORS无关,实

  • 我正在尝试使用AJAX POST将我在第三方JS函数(支付网关)的回调函数中得到的响应保存到我的服务器,但我得到的状态代码为-405方法不允许。我得到的响应是-消息:请求方法'POST'不受支持,描述:所请求的资源不允许指定的HTTP方法。 我有以下Javascript客户端代码- 相应的服务器端Spring MVC处理程序- 关于“405方法不允许”的StackOverflow的大多数答案都导致