Muestra cómo realizar solicitudes habilitadas para CORS con Cloud Functions.
Páginas de documentación que incluyen esta muestra de código
Para ver la muestra de código usada en contexto, consulta la siguiente documentación:
Muestra de código
C#
using Google.Cloud.Functions.Framework;
using Microsoft.AspNetCore.Http;
using System.Net;
using System.Threading.Tasks;
namespace Cors
{
// For more information about CORS and CORS preflight requests, see
// https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request.
public class Function : IHttpFunction
{
public async Task HandleAsync(HttpContext context)
{
HttpRequest request = context.Request;
HttpResponse response = context.Response;
// Set CORS headers
// Allows GETs from any origin with the Content-Type
// header and caches preflight response for 3600s
response.Headers.Append("Access-Control-Allow-Origin", "*");
if (HttpMethods.IsOptions(request.Method))
{
response.Headers.Append("Access-Control-Allow-Methods", "GET");
response.Headers.Append("Access-Control-Allow-Headers", "Content-Type");
response.Headers.Append("Access-Control-Max-Age", "3600");
response.StatusCode = (int) HttpStatusCode.NoContent;
return;
}
await response.WriteAsync("CORS headers set successfully!");
}
}
}
C++
#include <google/cloud/functions/http_request.h>
#include <google/cloud/functions/http_response.h>
namespace gcf = ::google::cloud::functions;
gcf::HttpResponse http_cors(gcf::HttpRequest request) { // NOLINT
// Set CORS headers for preflight request
if (request.verb() == "OPTIONS") {
// Allows GET requests from any origin with the Content-Type header and
// caches preflight response for an 3600s
return gcf::HttpResponse{}
.set_result(gcf::HttpResponse::kNoContent)
.set_header("Access-Control-Allow-Origin", "*")
.set_header("Access-Control-Allow-Methods", "GET")
.set_header("Access-Control-Allow-Headers", "Content-Type")
.set_header("Access-Control-Max-Age", "3600");
}
return gcf::HttpResponse{}
.set_header("Access-Control-Allow-Origin", "*")
.set_header("content-type", "text/plain")
.set_payload("Hello World!");
}
Go
// Package http provides a set of HTTP Cloud Functions samples.
package http
import (
"fmt"
"net/http"
)
// CORSEnabledFunction is an example of setting CORS headers.
// For more information about CORS and CORS preflight requests, see
// https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request.
func CORSEnabledFunction(w http.ResponseWriter, r *http.Request) {
// Set CORS headers for the preflight request
if r.Method == http.MethodOptions {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
w.Header().Set("Access-Control-Max-Age", "3600")
w.WriteHeader(http.StatusNoContent)
return
}
// Set CORS headers for the main request.
w.Header().Set("Access-Control-Allow-Origin", "*")
fmt.Fprint(w, "Hello, World!")
}
Java
import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.HttpURLConnection;
public class CorsEnabled implements HttpFunction {
// corsEnabled is an example of setting CORS headers.
// For more information about CORS and CORS preflight requests, see
// https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request.
@Override
public void service(HttpRequest request, HttpResponse response)
throws IOException {
// Set CORS headers
// Allows GETs from any origin with the Content-Type
// header and caches preflight response for 3600s
response.appendHeader("Access-Control-Allow-Origin", "*");
if ("OPTIONS".equals(request.getMethod())) {
response.appendHeader("Access-Control-Allow-Methods", "GET");
response.appendHeader("Access-Control-Allow-Headers", "Content-Type");
response.appendHeader("Access-Control-Max-Age", "3600");
response.setStatusCode(HttpURLConnection.HTTP_NO_CONTENT);
return;
}
// Handle the main request.
BufferedWriter writer = response.getWriter();
writer.write("CORS headers set successfully!");
}
}
Node.js
/**
* HTTP function that supports CORS requests.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.corsEnabledFunction = (req, res) => {
// Set CORS headers for preflight requests
// Allows GETs from any origin with the Content-Type header
// and caches preflight response for 3600s
res.set('Access-Control-Allow-Origin', '*');
if (req.method === 'OPTIONS') {
// Send response to OPTIONS requests
res.set('Access-Control-Allow-Methods', 'GET');
res.set('Access-Control-Allow-Headers', 'Content-Type');
res.set('Access-Control-Max-Age', '3600');
res.status(204).send('');
} else {
res.send('Hello World!');
}
};
PHP
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use GuzzleHttp\Psr7\Response;
function corsEnabledFunction(ServerRequestInterface $request): ResponseInterface
{
// Set CORS headers for preflight requests
// Allows GETs from any origin with the Content-Type header
// and caches preflight response for 3600s
$headers = ['Access-Control-Allow-Origin' => '*'];
if ($request->getMethod() === 'OPTIONS') {
// Send response to OPTIONS requests
$headers = array_merge($headers, [
'Access-Control-Allow-Methods' => 'GET',
'Access-Control-Allow-Headers' => 'Content-Type',
'Access-Control-Max-Age' => '3600'
]);
return new Response(204, $headers, '');
} else {
return new Response(200, $headers, 'Hello World!');
}
}
Python
def cors_enabled_function(request):
# For more information about CORS and CORS preflight requests, see
# https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request
# for more information.
# Set CORS headers for the preflight 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)
Ruby
FunctionsFramework.http "cors_enabled_function" do |request|
# For more information about CORS and CORS preflight requests, see
# https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request
# for more information.
# Set CORS headers for the preflight request
if request.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"
}
[204, headers, []]
else
# Set CORS headers for the main request
headers = {
"Access-Control-Allow-Origin" => "*"
}
[200, headers, ["Hello World!"]]
end
end
¿Qué sigue?
Para buscar y filtrar muestras de código para otros productos de Google Cloud, consulta el navegador de muestra de Google Cloud.