Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 是否可能从前端获取对云功能的请求?_Javascript_Google Cloud Platform_Axios - Fatal编程技术网

Javascript 是否可能从前端获取对云功能的请求?

Javascript 是否可能从前端获取对云功能的请求?,javascript,google-cloud-platform,axios,Javascript,Google Cloud Platform,Axios,我试图在JS中从前端向GCP Cloud函数发出GET请求,但收到错误: Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://us-central1-<project>.cloudfunctions.net/<function-name>. (Reason: CORS header ‘Access-Control-All

我试图在JS中从前端向GCP Cloud函数发出GET请求,但收到错误:


Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://us-central1-<project>.cloudfunctions.net/<function-name>. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我本来打算从前端调用第三方API,但它也给了我这个错误,然后我想看看是否可以使用CF作为中间人,但我猜我需要设置一个服务器

当然可以从前端向云功能或其他站点发出GET请求吗

axios({
    method: 'GET', //you can set what request you want to be
    url: "http://<cloud-function>.com/<function-name>",
    data: {message: "test"},
}).then(data => {
    console.log(data)
}).catch(error => {
    console.log(error)
})

绝对有可能。您需要在云函数中允许您的源代码

另一方面,请尝试使用以下方法:

axios({
    method: 'GET', //you can set what request you want to be
    url: "https://cors-anywhere.herokuapp.com/http://<cloud-function>.com/<function-name>",
    data: {message: "test"},
}).then(data => {
    console.log(data)
}).catch(error => {
    console.log(error)
})

绝对有可能。您需要在云函数中允许您的源代码

另一方面,请尝试使用以下方法:

axios({
    method: 'GET', //you can set what request you want to be
    url: "https://cors-anywhere.herokuapp.com/http://<cloud-function>.com/<function-name>",
    data: {message: "test"},
}).then(data => {
    console.log(data)
}).catch(error => {
    console.log(error)
})

正如其他人所提到的,我可以在云功能中允许CORS,但下面是如何使用Nodejs:

exports.someFunction = (req, res) => {
  res.set('Access-Control-Allow-Origin', "*")
  res.set('Access-Control-Allow-Methods', 'GET, POST')
  res.set('Access-Control-Allow-Headers', 'Content-Type');

  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};


现在我可以从我的前端调用它。

正如其他人所提到的,我可以在云函数中允许CORS,但下面是如何使用Nodejs实现这一点:

exports.someFunction = (req, res) => {
  res.set('Access-Control-Allow-Origin', "*")
  res.set('Access-Control-Allow-Methods', 'GET, POST')
  res.set('Access-Control-Allow-Headers', 'Content-Type');

  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};


现在我可以从我的前端调用它。

这是浏览器安全策略,以避免意外请求。如果您是函数的所有者,则需要为服务器设置白名单

exports.corsEnabledFunction=req,res=>{ //为飞行前请求设置CORS标头 //允许从具有内容类型标头的任何来源获取 //并缓存3600秒的飞行前响应 res.set'Access-Control-Allow-Origin','*'; 如果req.method==“选项”{ //发送对选项请求的响应 res.set'Access-Control-Allow-Methods'、'GET'; res.set'Access-Control-Allow-Headers'、'Content-Type'; res.set'Access-Control-Max-Age','3600'; res.status204.send; }否则{ res.发送“你好,世界!”; } };
此代码遵循GCP官方文档

这是浏览器安全策略,以避免意外请求。如果您是函数的所有者,则需要为服务器设置白名单

exports.corsEnabledFunction=req,res=>{ //为飞行前请求设置CORS标头 //允许从具有内容类型标头的任何来源获取 //并缓存3600秒的飞行前响应 res.set'Access-Control-Allow-Origin','*'; 如果req.method==“选项”{ //发送对选项请求的响应 res.set'Access-Control-Allow-Methods'、'GET'; res.set'Access-Control-Allow-Headers'、'Content-Type'; res.set'Access-Control-Max-Age','3600'; res.status204.send; }否则{ res.发送“你好,世界!”; } };
此代码遵循GCP官方文件

您可以致电第三方,但是您可能需要一些身份验证密钥或需要在调用中传递的内容您是否尝试从函数返回CORS标头?虽然关闭my的原因中附加的链接向CORS提供了一个解释,但它实际上并不能解决我所遇到的问题。您可以向第三方调用,但是,您可能需要一些身份验证密钥或需要在调用中传递的内容。您是否尝试从函数返回CORS标头?虽然关闭my的原因中附加的链接向CORS提供了解释,但它实际上并没有解决我遇到的问题