HTTP tetikleyicileri, Function Compute işlevini standart HTTP veya HTTPS istekleriyle çağırmanızı sağlar. Function Compute üzerinde web hizmetleri ve API'ler oluşturmanın en hızlı yoludur: kodlama ek yükü yoktur, yönetilecek ek bir ağ geçidine gerek duyulmaz ve herhangi bir HTTP test aracı veya Webhook özelliğine sahip hizmetle uyumludur.
Nasıl Çalışır?
Bir HTTP tetikleyicisi, işlevinizi bir HTTP uç noktası olarak kullanıma sunar. Bir istek geldiğinde, Function Compute (yapılandırılmışsa) isteğin kimlik doğrulamasını yapar, ardından isteği işlevinize iletir ve işlevin HTTP yanıtını çağıran tarafa döndürür.
Desteklenen HTTP yöntemleri: GET, POST, PUT, DELETE, HEAD, PATCH ve OPTIONS.
Node.js ile hazırlanmış basit bir web işlevi işleyicisi:
exports.handler = (event, context, callback) => {
const request = JSON.parse(event);
const response = {
statusCode: 200,
headers: { 'Content-Type': 'text/plain' },
body: 'Hello from Function Compute'
};
callback(null, response);
};
event nesnesi tam HTTP isteğini (yol, üstbilgiler, gövde, yöntem) içerir. HTTP yanıtı göndermek için statusCode, headers ve body alanlarını içeren bir nesne döndürün.
Kullanım Notları
HTTP tetikleyicileri kullanarak geliştirme yapmadan önce aşağıdaki davranışlara dikkat edin.
Anonim erişim riski
Authentication Method seçeneğini No Authentication olarak ayarlarsanız, uç nokta URL'sine sahip olan herkes işlevinizi çağırabilir. Özel yetkilendirmeyi zorlamak için işlev kodunuzda Authorization üstbilgisini doğrulayın. Ayrıntılar için bkz. HTTP tetikleyicileri için imza tabanlı kimlik doğrulamayı yapılandırma.
APK indirme kısıtlaması
10 Haziran 2024 tarihinden itibaren, yeni oluşturulan HTTP tetikleyicileri genel ağ uç noktaları üzerinden APK dosya indirmelerini (MIME türü application/vnd.android.package-archive) engeller. İstekler HTTP durum kodu 400 ile yanıt verir. Ayrıntılar için bkz. HTTP tetikleyicinizin genel uç noktasının .apk dosyalarını doğru şekilde döndürmesini sağlama.
VIP rotasyonu
Function Compute, genel ve özel uç noktalarla ilişkili sanal IP adreslerini (VIP) periyodik olarak değiştirir. VIP'lerin sabit kodlanması hizmet kesintilerine neden olur ve Function Compute hizmet düzeyi sözleşmesi (SLA) kapsamında değildir. Kararlı erişim için CNAME yapılandırmasıyla birlikte özel bir alan adı kullanın. Ayrıntılar için bkz. Özel bir alan adı yapılandırma.
Varsayılan alan adı ve ek davranışı
Varsayılan aliyuncs.com alan adını kullanırken, Function Compute tüm yanıtlara content-disposition: attachment ekler; bu da tarayıcıların yanıtları işlemek yerine dosya olarak indirmesine neden olur. Bu davranışı kaldırmak için özel bir alan adı yapılandırın.
Sınırlamalar
Tetikleyici sınırlamaları
İşlev sürümü veya takma adı başına en fazla bir HTTP tetikleyicisi bulunabilir. Bkz. Sürüm yönetimi ve Takma adı yönetimi.
Yerleşik alan adları yalnızca test amaçlıdır; kararlılık garanti edilmez. Bunları üretim ortamına yönelik hizmetler için kullanmayın. Dışa dönük hizmetler için, işlevinizi kullanıma sunmadan önce ICP kaydı yapılmış özel bir alan adı bağlayın. Bkz. Özel bir alan adı yapılandırma.
İstek sınırlamaları
| Sınır | Değer |
|---|---|
| Üstbilgi boyutu (tüm anahtarlar + değerler) | 8 KB |
| Yol boyutu (sorgu parametreleri dahil) | 4 KB |
| Gövde boyutu — senkron çağrı | 32 MB |
| Gövde boyutu — zaman uyumsuz çağrı | Bkz. İşlev çalıştırma kaynak sınırları |
Senkron çağrılar için üstbilgi, yol veya gövde sınırlarının aşılması, HTTP durum kodu 400 ve hata kodu InvalidArgument ile sonuçlanır.
Desteklenmeyen istek üstbilgileri: x-fc- ile başlayan herhangi bir üstbilginin yanı sıra connection ve keep-alive.
Yanıt sınırlamaları
| Sınır | Değer |
|---|---|
| Üstbilgi boyutu (tüm anahtarlar + değerler) | 8 KB |
Yanıt üstbilgisi sınırının aşılması, HTTP durum kodu 502 ve hata kodu BadResponse ile sonuçlanır.
Desteklenmeyen yanıt üstbilgileri: x-fc- ile başlayan herhangi bir üstbilginin yanı sıra connection, content-length, date, keep-alive, server, upgrade ve content-disposition:attachment.
Çağrı Yöntemleri
Senkron Çağrı
HTTP tetikleyicileri varsayılan olarak senkron çağrı kullanır. İşlev, bağlantı kapanmadan önce isteği işler ve sonucu döndürür. Bkz. Senkron çağrı.
Zaman Uyumsuz Çağrı
Zaman uyumsuz çağrıda, Function Compute isteği kalıcı hale getirir ve işlevin bitmesini beklemeden hemen HTTP durum kodu 202 döndürür. 202 dışındaki herhangi bir durum kodu, çağrının başarısız olduğu anlamına gelir. Hata işleme için bkz. Yeniden deneme mekanizması.
Zaman uyumsuz olarak çağırmanın iki yolu vardır:
İstek düzeyinde zaman uyumsuzluk: Herhangi bir HTTP isteğine
"X-Fc-Invocation-Type": "Async"üstbilgisini ekleyin. Bkz. Zaman uyumsuz çağrı.Zaman uyumsuz görev: İşleviniz için zaman uyumsuz bir görev yapılandırdıktan sonra, çağrı kimliğini belirtmek üzere
"X-Fc-Async-Task-Id": "<task-id>"üstbilgisini ekleyin. Bkz. Zaman uyumsuz görev.
Yanıt, örneğin "X-Fc-Request-Id": "80bf7****281713e1" şeklinde bir istek kimliğini üstbilgide içerir. Desteklenen tüm istek üstbilgileri için bkz. İşlev çağırma.
Kimlik Doğrulama ve Yetkilendirme
Dış çağıranlar, bir HTTP tetikleyicisi aracılığıyla işlevinize erişmeden önce Function Compute kimlik doğrulama kontrollerini geçmelidir. Desteklenen yöntemler:
Çapraz Kaynak Paylaşımı (CORS)
Function Compute, çapraz kaynak paylaşımı (CORS) isteklerini işlemek için maliyet, karmaşıklık ve esneklik açısından farklı ödünleşimler sunan üç yöntemi destekler.
| Özellik | API Yapılandırmalı CORS (önerilen) | Varsayılan CORS | Kullanıcı Tanımlı CORS (kod) |
|---|---|---|---|
| Ön kontrol isteği ücretlendirilir mi? | Ücretlendirilmez (ağ geçidi işler) | Potansiyel ücretler | Ücretlendirilir (işlev tetiklenir) |
| Kod değişikliği gerekir mi? | Yok | Yok | Yüksek |
| Desteklenen API sürümleri | Yalnızca FC 3.0 | Tüm sürümler | Tüm sürümler |
| Yapılandırma karmaşıklığı | Düşük (tek seferlik kurulum) | Yok | Yüksek (OPTIONS ele alınmalıdır) |
Varsayılan CORS Davranışı
Varsayılan olarak, Function Compute isteklere göre CORS üstbilgilerini geri yansıtır. Basit istekler (ön kontrol yok) için yanıt şunları içerir:
Access-Control-Allow-Origin: İstektekiOriginüstbilgisinden kopyalanırAccess-Control-Allow-Credentials:trueAccess-Control-Expose-Headers: Function Compute tarafından tanımlanan üstbilgiler
CORS'u İşlev Kodunda İşleme
Basit istekler için, yanıtınızda doğrudan Access-Control-Allow-* üstbilgilerini ayarlayın.
Basit olmayan istekler için, bir tarayıcı gerçek istekten önce bir ön kontrol OPTIONS isteği gönderir. HTTP tetikleyicinizin izin verilen yöntemlerine OPTIONS ekleyin ve bunu işlev kodunuzda işleyin.
<details> <summary>Node.js örneği</summary>
exports.handler = (event, context, callback) => {
const method = JSON.parse(event).requestContext.http.method;
if (method === 'OPTIONS') {
const fcResponse = {
statusCode: 204,
headers: {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '3600'
},
body: ''
};
callback(null, fcResponse);
} else {
callback(null, {
statusCode: 200,
body: 'hello world'
});
}
};
</details>
<details> <summary>Python örneği</summary>
import json
def handler(event, context):
evt = json.loads(event)
method = evt.get('requestContext', {}).get('http', {}).get('method', '')
if method == 'OPTIONS':
return {
'statusCode': 204,
'headers': {
'Access-Control-Allow-Origin': 'http://www.fc.com',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '3600'
},
'body': ''
}
return {
'statusCode': 200,
'body': 'hello world'
}
</details>
<details> <summary>Go örneği</summary>
package main
import (
"context"
"encoding/json"
)
type HttpRequest struct {
RequestContext struct {
Http struct {
Method string `json:"method"`
} `json:"http"`
} `json:"requestContext"`
}
type HttpResponse struct {
StatusCode int `json:"statusCode"`
Headers map[string]string `json:"headers"`
Body string `json:"body"`
}
func Handler(ctx context.Context, event []byte) (*HttpResponse, error) {
var req HttpRequest
if err := json.Unmarshal(event, &req); err != nil {
return nil, err
}
if req.RequestContext.Http.Method == "OPTIONS" {
return &HttpResponse{
StatusCode: 204,
Headers: map[string]string{
"Access-Control-Allow-Origin": "http://www.fc.com",
"Access-Control-Allow-Methods": "POST",
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Max-Age": "3600",
},
Body: "",
}, nil
}
return &HttpResponse{StatusCode: 200, Body: "hello world"}, nil
}
</details>
API Yapılandırmalı CORS
API Yapılandırmalı CORS, davetiyeli ön izleme olarak sunulmaktadır. Etkinleştirmek için bizimle iletişime geçin ve Alibaba Cloud hesap kimliğinizi (UID) sağlayın.
API Yapılandırmalı CORS, ağ geçidi katmanı özelliğidir. CORS ilkelerini doğrudan bir HTTP tetikleyicisi veya özel alan adına yapılandırın; işlev kodunuzda CORS mantığına gerek yoktur.
Temel avantajlar:
Kod değişikliği yok: CORS işlemini iş mantığından ayırın.
Daha düşük maliyet: Ağ geçidi, ön kontrol
OPTIONSisteklerini doğrudan işler, bu nedenle hiçbir işlev örneği çalışmaz.Merkezi yönetim: CORS ilkelerini tetikleyici veya alan adı düzeyinde uygulayın.
Daha düşük gecikme süresi: Ağ geçidi, işlevinizi çağırmadan ön kontrol yanıtlarını döndürür.
Kapsam:
Yalnızca FC 3.0 işlevleri (API sürümü
2023-03-30)HTTP tetikleyicileri (yerleşik test alan adları dahil) ve bağlı özel alan adları için geçerlidir
Tetikleyiciyi güncelle veya Özel alan adını güncelle API'sini kullanarak yapılandırın.
CORS yapılandırma parametreleri
| Parametre | Tür | Açıklama | Varsayılan | Kısıtlama |
|---|---|---|---|---|
allowOrigins |
Dizi | Kaynaklara erişmesine izin verilen kökenler | — | Maksimum 100 öğe, her biri ≤ 256 karakter. * veya https://* desteklenir. |
allowMethods |
Dizi | İzin verilen HTTP yöntemleri | Tetikleyici yöntemleri | OPTIONS dahil etmeyin; ağ geçidi ön kontrolü otomatik olarak işler. |
allowHeaders |
Dizi | Tarayıcılardan izin verilen özel istek üstbilgileri | — | Maksimum 50 öğe. * desteklenir. |
exposeHeaders |
Dizi | Tarayıcılara gösterilen yanıt üstbilgileri | Sistem varsayılanı | Maksimum 50 öğe. |
allowCredentials |
Boole | Çapraz kaynak isteklerinde çerezlere ve kimlik bilgilerine izin verilip verilmeyeceği | false |
true ise, allowOrigins * olamaz. |
maxAge |
Tamsayı | Ön kontrol yanıtları için önbellek süresi (saniye cinsinden) | 3600 |
Aralık: 0–86400. |
allowOrigins değerleri:
*: Tüm kökenlere izin ver (yalnızcaallowCredentialsfalseolduğunda).https://*:https://ile başlayan tüm kökenlere izin ver.Belirli alan adı:
https://example.com.Birden çok alan adı:
["https://example.com", "https://app.example.com"].Alt alan adı joker karakterleri (örneğin,
https://*.example.com) desteklenmez. Tüm alan adlarını açıkça listeleyin.
allowMethods değerleri:
Standart HTTP yöntemleri:
GET,POST,PUT,DELETE,PATCH,HEAD.*: Tüm yöntemlere izin ver.OPTIONSdahil etmeyin; ağ geçidi tüm ön kontrol isteklerini otomatik olarak yönetir.
Ağ Geçidi İstekleri Nasıl İşler?
Ön kontrol istekleri (OPTIONS)
Ağ geçidi, Origin, Access-Control-Request-Method ve Access-Control-Request-Headers üstbilgilerini doğrular:
Doğrulama başarılı: Yapılandırılmış CORS üstbilgileriyle
204 No Contentdöndürür. İşlevi çağırmaz.-
Doğrulama başarısız:
Köken eşleşiyor ancak diğer üstbilgiler eşleşmiyor: Ağ geçidi temel CORS üstbilgilerini ayarlar, ardından isteği işleve iletir.
Köken eşleşmiyor: CORS üstbilgileri ayarlanmaz. İstek işleve iletilir.
Basit istekler (GET, POST, HEAD vb.)
Ağ geçidi yalnızca Origin üstbilgisini doğrular:
Doğrulama başarılı: Yanıta
Access-Control-Allow-Originve diğer CORS üstbilgilerini ekler. İsteği işleve iletir.Doğrulama başarısız: CORS üstbilgilerini eklemez. Yine de isteği işleve iletir.
Öncelik
Aynı yol için birden fazla CORS işleme yöntemi geçerli olduğunda, ağ geçidi bunları şu sırayla uygular:
API Yapılandırmalı CORS (en yüksek öncelik): Etkinleştirilirse, ağ geçidi önce bu yapılandırmayı uygular.
Varsayılan CORS: API Yapılandırmalı CORS devre dışı bırakılırsa, ağ geçidi yerleşik varsayılan yansıtma davranışını kullanır.
İşlev tanımlı CORS: İşleviniz tarafından döndürülen üstbilgiler, yukarıdaki sonuçlarla birleştirilir.
HTTP Tetikleyicisi ve API Gateway Tetikleyicisi Karşılaştırması
Hem HTTP tetikleyicileri hem de API Gateway tetikleyicileri web uygulamaları oluşturmayı destekler.
| HTTP tetikleyicisi | API Gateway tetikleyicisi | |
|---|---|---|
| En uygun kullanım | Hafif, doğrudan HTTP'den işleve giden yol | Trafik yönetimi veya istek dönüşümü gibi API Gateway özelliklerine ihtiyaç duyduğunuzda |
| Yol yönlendirme | Özel bir alan adı bağlayarak URL yollarını işlevinize eşleyin | Function Compute'u API arka ucu olarak yapılandırın |
| Belgelendirme | Özel bir alan adı yapılandırma | Function Compute'u API arka uç hizmeti olarak kullanma |
HTTP tetikleyicileri, API Gateway tetikleyicilerine kıyasla şu avantajları sunar:
Ek ağ geçidi yapılandırması olmadan daha hızlı kurulur ve hata ayıklaması daha kolaydır.
JSON kodlama veya kod çözme ek yükü yoktur; HTTP tetikleyicileri istekleri ve yanıtları doğrudan iletir.
Standart HTTP test araçlarıyla uyumludur.
CDN kaynak çekme ve Simple Message Queue (eskiden MNS) gibi Webhook özelliğine sahip hizmetlerle kolayca entegre olur.
SSS
allowMethods listesine OPTIONS ekledikten sonra API çağrım neden başarısız oluyor?
OPTIONS seçeneğini corsConfig.allowMethods listesine eklemeyin. Ağ geçidi tüm ön kontrol isteklerini otomatik olarak yönetir. OPTIONS seçeneğini manuel olarak dahil etmek, istek işleme hatalarına neden olur.
API Yapılandırmalı CORS'u yapılandırdıktan sonra OPTIONS istekleri neden 204 yerine 200 döndürüyor?
Hesabınızın davetiyeli ön izleme erişimine sahip olduğunu onaylayın. Ağ geçidi eklentisi tam olarak etkinleştirilmemişse, ağ geçidi varsayılan CORS davranışına geri döner; bu davranış 200 döndürür ve isteği işlevinize iletir.
**allowOrigins içinde alt alan adı joker karakterlerini kullanabilir miyim, örneğin *.example.com?**
Hayır. Alt alan adı joker karakterleri desteklenmez. Gerekli tüm alan adlarını allowOrigins dizisinde açıkça listeleyin veya geniş HTTPS köken eşleştirmesi için https://* kullanın.
İşlev kodum da CORS üstbilgilerini ayarlıyor. Çakışma olur mu?
Hayır. Ağ geçidi tarafından oluşturulan üstbilgiler ve işlev tarafından döndürülen üstbilgiler birleştirilir. Yinelenenler varsa, tarayıcılar ilk uyumlu değeri kullanır. Mevcut uygulamalar geçiş sırasında çalışmaya devam eder.