web-dev-qa-db-ja.com

Google Cloud FunctionsはCORSを有効にしますか?

Hello World Google Cloud Functionsチュートリアルを終了し、次の応答ヘッダーを受け取りました。

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

Webサイトから関数を呼び出すためにCORSヘッダーを追加するにはどうすればよいですか?

24
Federico Elles

さあ:

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))
52
spencercooly

私はGoogle Cloud Functionsのプロダクトマネージャーです。ご質問ありがとうございます。これは一般的なリクエストです。

まだ発表するものはありませんが、Cloud FunctionsのHTTP呼び出し機能に対して行う必要のあるいくつかの機能強化を認識しており、今後のイテレーションでこの機能や他の多くの領域の機能強化を展開する予定です。

更新:

Cloud FunctionsでのHTTPの処理方法を改善しました。 HTTP Request/Responseオブジェクトへのフルアクセスが可能になったため、適切なCORSヘッダーを設定し、プリフライトOPTIONSリクエストに応答できます( https://cloud.google.com/functions/docs/writing/http

19
Jason Polites

実際のコードサンプルを探している場合(およびあなたの質問はまだ関連しています)、私はそれについてのブログ投稿を書きました: https://mhaligowski.github.io/blog/2017/03/10/cors- in-cloud-functions.html

9
mhaligowski

webfunc を作成しました。これは、CORSとGoogle Cloud Functionsのルーティングをサポートする軽量のHTTPサーバーです。例:

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"
  }
}

お役に立てれば。

4
Nicolas Dao

CORSエクスプレスミドルウェアを使用できます。

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);
1
Gary

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 docs を参照してください。

0
half-hitch