Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不允许获取修补程序请求(CORS)_Javascript_Cors_Fetch Api - Fatal编程技术网

Javascript 不允许获取修补程序请求(CORS)

Javascript 不允许获取修补程序请求(CORS),javascript,cors,fetch-api,Javascript,Cors,Fetch Api,所以我使用fetch已经有一段时间了,没有任何问题。我已经创建了很多API,并且必须在多个API中实现CORS 然而,今天我似乎无法让CORS为一个补丁请求工作。它适用于get/post/delete,没有问题,但补丁不起作用 我读过,遗憾的是我已经写了完全大写的补丁,所以这不是我的解决方案 我的请求: { method: 'PATCH', //using POST here makes everything work fine. json: true, headers: defau

所以我使用fetch已经有一段时间了,没有任何问题。我已经创建了很多API,并且必须在多个API中实现CORS

然而,今天我似乎无法让CORS为一个补丁请求工作。它适用于get/post/delete,没有问题,但补丁不起作用

我读过,遗憾的是我已经写了完全大写的补丁,所以这不是我的解决方案

我的请求:

{
  method: 'PATCH', //using POST here makes everything work fine.
  json: true,
  headers: defaultHeaders,
  body: JSON.stringify({
    type: 'analytics_analyzers',
    attributes: {
      status: active ? 1 : 2,
      ssid: getState().config.ssid
    }
  })
}
以及服务器的.htaccess文件:

SetEnvIf Origin "http(s)?://(www\.)?    (whitelistUrl1|whitelistUrl2|whitelistUrl3)$" AccessControlAllowOrigin=$0
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header always set Access-Control-Allow-Credentials true

SetEnvIf Access-Control-Request-Headers ".*" AccessControlHeaders=$0
Header always set Access-Control-Allow-Headers: %{AccessControlHeaders}e env=AccessControlHeaders

SetEnvIf Access-Control-Request-Method ".*" AccessControlMethod=$0
Header always set Access-Control-Allow-Methods: %{AccessControlMethod}e env=AccessControlMethod


有人知道我做错了什么吗?

事实上,当我们向服务器端发送一个不简单的cors请求时,比如
DELETE/PUT/PATCH
,但不包括
POST/GET/HEAD
,浏览器将发送一个
OPTIONS
请求(飞行前)到服务器端,然后询问它是否支持
方法/ORIGIN/HEADERS
,因此,如果您只指定了补丁请求,那么允许的方法是不够的

这是我的示例代码,只是为了这个问题,可能不是那么优雅,希望你不要介意

app.patch('/cors', (req, res) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length,Server,Date,access-control-allow-methods,access-control-allow-origin");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS,PATCH");
  res.send('ok')
})

app.options('/*', (req, res) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length,Server,Date,access-control-allow-methods,access-control-allow-origin");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS,PATCH");
  res.send('send some thing whatever')
})


Access Control Allow Methods
标题中可能缺少
PATCH
方法。@Gothdo它就在那里。检查图像的链接。