

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# CORS für REST APIs im API Gateway
<a name="how-to-cors"></a>

[Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) ist eine Browser-Sicherheitsfunktion, die Cross-Origin-HTTP-Anfragen einschränkt, die von Skripts eingeleitet werden, die im Browser ausgeführt werden. Weitere Informationen finden Sie unter [Was ist CORS?](https://aws.amazon.com/what-is/cross-origin-resource-sharing/).

## Feststellung, ob die CORS-Unterstützung aktiviert werden soll
<a name="apigateway-cors-request-types"></a>

*Cross-Origin*-HTTP-Anfragen zielen auf Folgendes:
+ Eine andere *Domäne* (z. B. von `example.com` an `amazondomains.com`)
+ Eine andere *Subdomäne* (z. B. von `example.com` an `petstore.example.com`)
+ Ein anderer *Port* (z. B. von `example.com` an `example.com:10777`)
+ Ein anderes *Protokoll* (z. B. von `https://example.com` an `http://example.com`)

 Wenn Sie nicht auf Ihre API zugreifen können und eine Fehlermeldung erhalten, die `Cross-Origin Request Blocked` enthält, müssen Sie möglicherweise CORS aktivieren.

Cross-Origin-HTTP-Anfragen lassen sich in zwei Arten unterteilen: *einfache* und *nicht einfache* Anfragen.

## Aktivieren von CORS für eine einfache Anfrage
<a name="apigateway-cors-simple-request"></a>

Eine HTTP-Anfrage ist *einfach*, wenn alle der folgenden Bedingungen erfüllt sind:
+ Sie wird für eine API-Ressource gestellt, die nur `GET`-, `HEAD`- und `POST`-Anfragen erlaubt.
+ Wenn es sich um eine `POST`-Methodenanfrage handelt, muss sie einen `Origin`-Header enthalten.
+ Der Anfragenutzlast-Inhaltstyp ist `text/plain`, `multipart/form-data` oder `application/x-www-form-urlencoded`.
+ Die Anfrage enthält keine benutzerdefinierten Header.
+ Alle weiteren Anforderungen, die in der [Mozilla CORS-Dokumentation für einfache Anfragen](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests) aufgelistet sind.

Bei einfachen quellenübergreifenden `POST`-Methodenanfragen muss die Antwort Ihrer Ressource den Header `Access-Control-Allow-Origin: '*'` oder `Access-Control-Allow-Origin:{{'origin'}}` enthalten.

Alle anderen Cross-Origin-HTTP-Anfragen sind *nicht einfache* Anfragen.

## Aktivieren von CORS für eine nicht einfache Anfrage
<a name="apigateway-enable-cors-non-simple"></a>

Wenn die Ressourcen Ihrer API nicht einfache Anfragen erhalten, müssen Sie je nach Integrationstyp zusätzliche CORS-Unterstützung aktivieren.

### Aktivieren von CORS für Integrationen ohne Proxy
<a name="apigateway-enable-cors-mock"></a>

Für diese Integrationen erfordert das [CORS-Protokoll](https://fetch.spec.whatwg.org/#http-cors-protocol), dass der Browser eine Preflight-Anfrage an den Server sendet und auf die Genehmigung (oder Anforderung der Anmeldeinformationen) vom Server wartet, bevor die tatsächliche Anfrage gesendet wird. Sie müssen Ihre API so konfigurieren, dass sie eine entsprechende Antwort auf die Preflight-Anfrage sendet. 

 So erstellen Sie eine Preflight-Antwort: 

1. Erstellen Sie eine `OPTIONS`-Methode mit einer Mock-Integration.

1. Fügen Sie der Antwort der Methode 200 die folgenden Antwort-Header hinzu:
   + `Access-Control-Allow-Headers`
   + `Access-Control-Allow-Methods`
   + `Access-Control-Allow-Origin`

1. Setzen Sie das Integrations-Pass-Through-Verhalten auf `NEVER`. In diesem Fall wird die Methodenanforderung eines nicht zugeordneten Inhaltstyps mit der Antwort „HTTP 415 Unsupported Media Type“ zurückgewiesen. Weitere Informationen finden Sie unter [Verhalten bei Methodenanfragen für Payloads ohne Zuordnungsvorlagen für REST APIs in API Gateway](integration-passthrough-behaviors.md).

1. Geben Sie Werte für die Antwort-Header ein. Verwenden Sie die folgenden Header-Werte, um alle Ursprünge, alle Methoden und allgemeine Header zuzulassen:
   + `Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'`
   + `Access-Control-Allow-Methods: 'DELETE,GET,HEAD,OPTIONS,PUT,POST,PATCH'`
   + `Access-Control-Allow-Origin: '*'`

Nachdem Sie die Preflight-Anfrage erstellt haben, müssen Sie den `Access-Control-Allow-Origin: '*'`- oder `Access-Control-Allow-Origin:{{'origin'}}`-OR-Header für alle CORS-fähigen Methoden für mindestens alle 200 Antworten zurückgeben.

### Aktivierung von CORS für Nicht-Proxy-Integrationen mit dem AWS-Managementkonsole
<a name="apigateway-enable-cors-mock-console"></a>

Sie können den verwenden, um CORS AWS-Managementkonsole zu aktivieren. API Gateway erstellt eine `OPTIONS`-Methode und fügt den `Access-Control-Allow-Origin`-Header zu Ihren vorhandenen Methodenintegrationsantworten hinzu. Dies funktioniert nicht immer und manchmal müssen Sie die Integrationsantwort manuell ändern, um den `Access-Control-Allow-Origin`-Header für alle CORS-fähigen Methoden für mindestens alle 200 Antworten zurückzugeben.

Wenn Sie für Ihre API binäre Medientypen auf `*/*` festgelegt haben, ändern Sie beim Erstellen einer `OPTIONS`-Methode durch API Gateway `contentHandling` auf `CONVERT_TO_TEXT`.

Der folgende [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration.html)-Befehl ändert `contentHandling` für eine Integrationsanforderung auf `CONVERT_TO_TEXT`: 

```
aws apigateway update-integration \
  --rest-api-id {{abc123}} \
  --resource-id {{aaa111}} \
  --http-method OPTIONS \
  --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
```

Mit dem folgenden [update-integration-response](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-integration-response.html)Befehl wird das `contentHandling` in `CONVERT_TO_TEXT` einer Integrationsantwort geändert:

```
aws apigateway update-integration-response \
  --rest-api-id {{abc123}} \
  --resource-id {{aaa111}} \
  --http-method OPTIONS \
  --status-code 200 \
  --patch-operations op='replace',path='/contentHandling',value='CONVERT_TO_TEXT'
```

## Aktivieren der CORS-Unterstützung für Proxy-Integrationen
<a name="apigateway-enable-cors-proxy"></a>

Bei einer Lambda-Proxy-Integration oder einer HTTP-Proxy-Integration ist Ihr Backend für die Rückgabe der Header `Access-Control-Allow-Origin`, `Access-Control-Allow-Methods` und `Access-Control-Allow-Headers` verantwortlich, da eine Proxy-Integration keine Integrationsantwort zurückgibt. 

Die folgenden Beispiel-Lambda-Funktionen geben die erforderlichen CORS-Header zurück:

------
#### [ Node.js ]

```
export const handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "{{Content-Type}}",
            "Access-Control-Allow-Origin": "{{https://www.example.com}}",
            "Access-Control-Allow-Methods": "{{OPTIONS,POST,GET}}"
        },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};
```

------
#### [ Python 3 ]

```
import json

def lambda_handler(event, context):
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': '{{Content-Type}}',
            'Access-Control-Allow-Origin': '{{https://www.example.com}}',
            'Access-Control-Allow-Methods': '{{OPTIONS,POST,GET}}'
        },
        'body': json.dumps('Hello from Lambda!')
    }
```

------

**Topics**
+ [Feststellung, ob die CORS-Unterstützung aktiviert werden soll](#apigateway-cors-request-types)
+ [Aktivieren von CORS für eine einfache Anfrage](#apigateway-cors-simple-request)
+ [Aktivieren von CORS für eine nicht einfache Anfrage](#apigateway-enable-cors-non-simple)
+ [Aktivieren der CORS-Unterstützung für Proxy-Integrationen](#apigateway-enable-cors-proxy)
+ [CORS für eine Ressource über die API Gateway-Konsole aktivieren](how-to-cors-console.md)
+ [CORS für eine Ressource über die API Gateway-Import-API aktivieren](enable-cors-for-resource-using-swagger-importer-tool.md)
+ [CORS für eine API-Gateway-API testen](apigateway-test-cors.md)