Je viens de terminer le didacticiel Hello World Google Cloud Functions et j'ai reçu les en-têtes de réponse suivants:
Connection → keep-alive
Content-Length → 14
Content-Type → text/plain; charset=utf-8
Date → Mon, 29 Feb 2016 07:02:37 GMT
Execution-Id → XbT-WC9lXKL-0
Server → nginx
Comment puis-je ajouter les en-têtes CORS pour pouvoir appeler ma fonction depuis mon site Web?
et c'est parti:
exports.helloWorld = function helloWorld(req, res) {
res.set('Access-Control-Allow-Origin', "*")
res.set('Access-Control-Allow-Methods', 'GET, POST')
res.status(200).send('weeee!);
};
alors vous pouvez jquery/que ce soit comme d'habitude:
$.get(myUrl, (r) => console.log(r))
Je suis le chef de produit pour Google Cloud Functions. Merci pour votre question, cela a été une demande populaire.
Nous n'avons rien à annoncer pour le moment, mais nous sommes conscients de plusieurs améliorations à apporter aux capacités d'appel HTTP de Cloud Functions. Nous allons déployer des améliorations dans ce domaine et dans de nombreux autres dans les futures itérations.
METTRE À JOUR:
Nous avons amélioré la gestion de HTTP dans les fonctions de cloud. Vous avez maintenant un accès complet aux objets Requête/Réponse HTTP afin de pouvoir définir les en-têtes CORS appropriés et répondre aux demandes OPTIONS avant le vol ( https://cloud.google.com/functions/docs/writing/http )
Si vous recherchez un exemple de code (et votre question est toujours d'actualité), j'ai écrit un article sur ce blog: https://mhaligowski.github.io/blog/2017/03/10/cors-in- cloud-functions.html .
Je viens de créer webfunc . C'est un serveur HTTP léger qui supporte CORS ainsi que le routage pour Google Cloud Functions. Exemple:
const { serveHttp, app } = require('webfunc')
exports.yourapp = serveHttp([
app.get('/', (req, res) => res.status(200).send('Hello World')),
app.get('/users/{userId}', (req, res, params) => res.status(200).send(`Hello user ${params.userId}`)),
app.get('/users/{userId}/document/{docName}', (req, res, params) => res.status(200).send(`Hello user ${params.userId}. I like your document ${params.docName}`)),
])
Dans la racine de votre projet, ajoutez simplement un appconfig.json qui ressemble à ceci:
{
"headers": {
"Access-Control-Allow-Methods": "GET, HEAD, OPTIONS, POST",
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept",
"Access-Control-Allow-Origin": "*",
"Access-Control-Max-Age": "1296000"
}
}
J'espère que cela t'aides.
Vous pouvez utiliser le middleware CORS Express.
package.json
npm install express --save
npm install cors --save
index.js
'use strict';
const functions = require('firebase-functions');
const express = require('express');
const cors = require('cors')({Origin: true});
const app = express();
app.use(cors);
app.get('*', (req, res) => {
res.send(`Hello, world`);
});
exports.hello = functions.https.onRequest(app);
Dans l'environnement python, vous pouvez utiliser l'objet de demande flask pour gérer les demandes CORS.
def cors_enabled_function(request):
if request.method == 'OPTIONS':
# Allows GET requests from any Origin with the Content-Type
# header and caches preflight response for an 3600s
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '3600'
}
return ('', 204, headers)
# Set CORS headers for the main request
headers = {
'Access-Control-Allow-Origin': '*'
}
return ('Hello World!', 200, headers)
Voir le gcloud docs pour plus.