2016-02-29 124 views
10

我剛剛完成的Hello World谷歌雲功能教程,並收到以下響應頭:谷歌雲功能啓用CORS?

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標頭,以便能夠從我的網站打電話給我的功能?

回答

20

在這裏我們去:

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)) 
+1

我已經嘗試了上述實現,但我收到:請求頭字段X-Requested-With在預檢響應中不被Access-Control-Allow-Headers所允許。任何建議? – florin

+0

嘗試添加res.set('Access-Control-Allow-Headers','Content Type','X-Requested-Width','...')發送迴應之前 –

8

我是Google Cloud Functions的產品經理。感謝您的問題,這是一個受歡迎的要求。

我們尚未公佈任何內容,但我們知道需要對雲功能的HTTP調用功能進行一些增強,我們將對此和其他許多方面進行改進在未來的迭代中。

UPDATE:

我們改善你處理雲功能HTTP的方式。您現在可以完全訪問HTTP請求/響應對象,因此您可以設置適當的CORS頭並響應飛行前選項請求(https://cloud.google.com/functions/docs/writing/http

+11

提供(https://cloud.google.com/functions/docs/writing/http)鏈接沒有提及任何CORS 。有沒有官方文檔可以看?我希望能有一個用戶界面來改變這些設置(a la aws),但似乎沒有。 – Ryan

0

您可以使用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); 
3

我剛剛創建了webfunc。它是一個輕量級的HTTP服務器,支持CORS以及Google Cloud Functions的路由。例如:

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

希望這有助於。