Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve un codice di stato HTTP 502 Bad Gateway con il codice di errore protocol.http.Response405WithoutAllowHeader come risposta alle chiamate API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 502 Bad Gateway
Inoltre, potresti visualizzare il seguente messaggio di errore:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}Possibili cause
Questo errore si verifica se il server di backend risponde con 405 Method Not Allowed stato
codice senza l'intestazione Allow.
Come indicato nella specifica
RFC 7231, sezione 6.5.5: 405 Method Not Allowed, è previsto che il server di origine
DEVE generare e inviare un campo di intestazione Allow in una risposta 405 contenente un
elenco dei metodi attualmente supportati della risorsa di destinazione. In caso contrario, Apigee risponde con
502 Bad Gateway e il codice di errore protocol.http.Response405WithoutAllowHeader.
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Risposta 405 senza intestazione Allow dal server di backend | Il server di backend che elabora la richiesta API risponde con il codice di stato 405 senza l'intestazione Allow. |
Utenti di Edge Public e Private Cloud |
Passaggi comuni per la diagnosi
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Monitoraggio delle API
Per diagnosticare l'errore utilizzando il monitoraggio delle API:
- Accedi all'interfaccia utente Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio API > Esamina.
- Seleziona l'intervallo di tempo specifico in cui hai osservato gli errori.
Traccia Codice di errore rispetto a Ora.
Seleziona una cella con il codice di errore
protocol.http.Response405WithoutAllowHeadercome mostrato di seguito:
Le informazioni sul codice di errore
protocol.http.Response405WithoutAllowHeadervengono visualizzate come mostrato di seguito:
Fai clic su Visualizza log ed espandi una delle richieste non riuscite per visualizzare ulteriori informazioni.
- Nella finestra Log, prendi nota dei seguenti dettagli:
- Codice di stato:
502 - Origine errore:
target - Codice di errore:
protocol.http.Response405WithoutAllowHeader.
- Codice di stato:
- Se Origine errore è
targete Codice di errore èprotocol.http.Response405WithoutAllowHeader, significa che il server di backend ha risposto con il codice di stato405 Method Not Allowedsenza l'intestazioneAllow.
Strumento Traccia
Per diagnosticare l'errore utilizzando lo strumento Traccia:
- Attiva la
sessione di traccia e
- Attendi che si verifichi l'errore
502 Bad Gatewayoppure - Se riesci a riprodurre il problema, effettua la chiamata API per riprodurre l'errore -
502 Bad Gateway
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia attivata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore si verifica in un flusso dopo la fase Richiesta inviata al server di destinazione , come mostrato di seguito:
Prendi nota del valore dell'errore dalla traccia.
La traccia di esempio riportata sopra mostra l'errore come
Received 405 Response without Allow Header. Poiché l'errore viene generato da Apigee dopo l'invio della richiesta al server di backend indica che il server di backend ha inviato il codice di stato della risposta405senza l'intestazioneAllow.- Vai alla fase AX (Dati di analisi registrati) nella traccia e fai clic su di essa.
Scorri verso il basso fino alla sezione Intestazioni di errore / risposta nel riquadro Dettagli fase e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source , come mostrato di seguito:
- Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source come
protocol.http.Response405WithoutAllowHeaderetargetrispettivamente, il che indica che questo errore è causato dal fatto che il backend ha inviato il codice di stato della risposta405senza l'intestazioneAllow.Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per determinare le
informazioni chiave sugli errori HTTP
502. Controlla i log degli accessi NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dove: ORG, ORG e PORT# vengono sostituiti con i valori effettivi.
- Cerca eventuali errori
502con il codice di erroreprotocol.http.Response405WithoutAllowHeaderdurante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con502. Se trovi errori
502con X-Apigee-fault-code corrispondente al valore diprotocol.http.Response405WithoutAllowHeader, determina il valore di X-Apigee-fault-source.Esempio di errore 502 dal log degli accessi NGINX:
La voce di esempio riportata sopra dal log degli accessi NGINX ha i seguenti valori per X-Apigee- fault-code e X-Apigee-fault-source:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Causa: risposta 405 senza intestazione Allow dal server di backend
Diagnosi
- Determina il Codice di errore e l'Origine errore per
502 Bad Gatewayutilizzando il monitoraggio delle API, lo strumento Traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi. - Se il Codice di errore è
protocol.http.Response405WithoutAllowHeadere l'Origine errore ha il valoretarget, significa che il server di backend ha risposto con un codice di stato405senza l'intestazioneAllow. Di conseguenza, Apigee risponde con502 Bad Gatewaye il codice di erroreprotocol.http.Response405WithoutAllowHeader.
Risoluzione
Utilizza uno dei seguenti metodi per risolvere il problema:
Server di backend
Opzione 1: correggi il server di backend in modo che invii il codice di stato 405 con l'intestazione Allow:
Assicurati che il server di backend rispetti sempre la specifica RFC 7231, sezione 6.5.5: 405 Method Not Allowed e invii il codice di stato
405includendo l'elenco dei metodi consentiti come parte di un'intestazioneAllow, come mostrato di seguito:Allow: HTTP_METHODS
- Ad esempio, se il server di backend consente i metodi
GET,POSTeHEAD, devi assicurarti che l'intestazioneAllowli contenga come segue:Allow: GET, POST, HEAD
Gestione degli errori
Opzione 2: utilizza la gestione degli errori per inviare il codice di stato 405 con l'intestazione Allow dal proxy API:
Se il server di backend restituisce il codice di stato 405 senza l'intestazione Allow, puoi utilizzare la gestione dei guasti per rispondere con il codice di stato 405 e l'intestazione
Allow dal proxy API come segue:
Crea una policy, ad esempio la policy AssignMessage o RaiseFault e imposta il codice di stato su
405con l'intestazioneAllowe un messaggio personalizzato.Esempio di policy AssignMessage per inviare 405 con l'intestazione Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Crea un
FaultRuleinTargetEndpointche richiama la policy quando riceve l'errore502con il codice di erroreprotocol.http.Response405WithoutAllowHeader.Esempio di configurazione di TargetEndpoint che mostra FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- Salva queste modifiche in una nuova revisione del proxy API ed esegui il deployment della revisione.
- Effettua le chiamate API e verifica di ricevere il codice di stato
405con l'Allowintestazione.
Configurare la proprietà
Opzione 3: configura la proprietà nel processore di messaggi per impedire ad Apigee Edge di restituire l'errore 502
- Se sei un utente di cloud privato, puoi aggiornare la proprietà
HTTP.ignore.allow_header.for.405atrueper impedire ad Apigee Edge di generare un errore502, anche se il server di backend risponde con il codice di stato405senza l'intestazioneAllowutilizzando la guida illustrativa: Configurare la proprietà ignore allow header for 405 nei processori di messaggi. - Se sei un utente di Public Cloud, contatta l'assistenza Apigee Edge.
Specifica
Apigee si aspetta la risposta 405 Method Not Allowed dal server di backend insieme
all'intestazione Allow in base alle seguenti specifiche:
| Specifica | |
|---|---|
| RFC 7231, sezione 6.5.5: 405 Method Not Allowed | |
| RFC 7231, sezione 7.4.1: Allow |
Punti chiave da tenere presenti
La soluzione consigliata è correggere il server di backend in modo che invii il codice di stato 405
con l'intestazione Allow e rispetti la specifica
RFC 7231, sezione 6.5.5: 405 Method Not Allowed.
Se hai ancora bisogno dell'assistenza di Apigee, vai a Informazioni di diagnostica da raccogliere.
Informazioni di diagnostica da raccogliere
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e contatta l'assistenza Apigee Edge.
Se sei un utente di Public Cloud, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Comando
curlcompleto utilizzato per riprodurre502 Bad Gatewaycon il codice di erroreprotocol.http.Response405WithoutAllowHeader - File di traccia per le richieste API
Se sei un utente di Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle del proxy API
- File di traccia per le richieste API
Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dove: ORG, ORG e PORT# vengono sostituiti con i valori effettivi.
- Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log