Облачные функции Google позволяют использовать CORS?
Я только что закончил учебник облачных функций Hello World Google и получил следующие заголовки ответов:
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
Как я могу добавить заголовки CORS для вызова своей функции с моего сайта?
Ответы
Ответ 1
здесь мы идем:
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!);
};
то вы можете использовать jquery/как обычно:
$.get(myUrl, (r) => console.log(r))
Ответ 2
Я менеджер продуктов для облачных функций Google. Спасибо за ваш вопрос, это был популярный запрос.
Нам пока ничего не объявлено, но мы знаем о нескольких улучшениях, которые необходимо внести в возможности HTTP-вызовов функций Cloud, и мы будем внедрять усовершенствования для этого и многих других областей в будущие итерации.
ОБНОВЛЕНИЕ:
Мы улучшили способ работы с HTTP в облачных функциях. Теперь у вас есть полный доступ к объектам HTTP-запроса/ответа, поэтому вы можете установить соответствующие заголовки CORS и ответить на запросы перед полетом OPTIONS (https://cloud.google.com/functions/docs/writing/http)
Ответ 3
Если вы ищете фактический пример кода (и ваш вопрос по-прежнему актуальным), я написал сообщение в блоге об этом: https://mhaligowski.github.io/blog/2017/03/10/cors-in-cloud-functions.html.
Ответ 4
Я только что создал webfunc. Это легкий HTTP-сервер, который поддерживает CORS, а также маршрутизацию для облачных функций Google. Пример:
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}`)),
])
В корне вашего проекта просто добавьте appconfig.json, который выглядит следующим образом:
{
"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"
}
}
Надеюсь, что это поможет.
Ответ 5
Вы можете использовать промежуточное ПО 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);
Ответ 6
Я написал простую запись в блоге о обработке CORS с облачными функциями google https://4dev.at/google-cloud-functions-with-cors/
Ответ 7
В среде python вы можете использовать объект запроса фляги для управления запросами 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)
Смотрите документацию по gcloud больше.
Ответ 8
Вы должны включить CORS во всех своих функциях, например, функция hello:
index.js
const cors = require('cors')();
// My Hello Function
function hello(req, res) {
res.status(200)
.send('Hello, Functions');
};
// CORS and Cloud Functions export
exports.hello = (req, res) => {
cors(req, res, () => {
hello(req, res);
});
}
Не забудьте про package.json
package.json
{
"name": "function-hello",
"version": "0.1.0",
"private": true,
"dependencies": {
"cors": "^2.8.5"
}
}