Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 502 Bad Gateway con l'errore
codice protocol.http.Response405WithoutAllowHeader come risposta per le chiamate API.
Messaggio di errore
L'applicazione client riceve il seguente codice di risposta:
HTTP/1.1 502 Bad Gateway
Potresti inoltre 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 lo stato 405 Method Not Allowed
senza l'intestazione Allow.
In base alle specifiche
RFC 7231, sezione 6.5.5: 405 Method Not Allowed, si prevede che il server di origine
DEVE generare e inviare un campo di intestazione Allow in una risposta 405 contenente un
dei metodi attualmente supportati dalla risorsa di destinazione. In caso contrario, Apigee risponde
502 Bad Gateway e codice di errore protocol.http.Response405WithoutAllowHeader.
| Causa | Descrizione | Le istruzioni di risoluzione dei problemi applicabili a |
|---|---|---|
| Risposta 405 senza intestazione Consenti 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 perimetrali di cloud pubblici e privati |
Passaggi diagnostici comuni
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Monitoraggio delle API
Per diagnosticare l'errore utilizzando API Monitoring:
- Accedi all'UI di Edge come utente con ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai al menu Analizza > Monitoraggio delle API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai osservato gli errori.
Traccia il codice di errore in base all'ora.
Seleziona una cella che contiene il codice di errore
protocol.http.Response405WithoutAllowHeadercome mostrato di seguito:
Informazioni sul codice di errore
protocol.http.Response405WithoutAllowHeaderviene visualizzato come mostrato di seguito:
Fai clic su Visualizza log ed espandi una delle richieste non riuscite per visualizzare ulteriori informazioni.
- Nella finestra Log, tieni presente i seguenti dettagli:
- .
- Codice di stato:
502 - Origine errore:
target - Codice di errore:
protocol.http.Response405WithoutAllowHeader.
- Codice di stato:
- Se Origine di errore è
targete Codice di errore èprotocol.http.Response405WithoutAllowHeader, questo indica che il backend server ha risposto con il codice di stato405 Method Not Allowedsenza ilAllow.
Strumento Trace
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Attiva lo
sessione di tracciamento e
- .
- Attendi che si verifichi l'errore
502 Bad Gatewayoppure - Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo -
502 Bad Gatewayerrore
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga attraverso le diverse fasi della traccia e individua dove si è verificato l'errore.
In genere troverai l'errore in un flusso successivo alla richiesta di richiesta inviata al server di destinazione come illustrato di seguito:
Prendi nota del valore dell'errore della 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 backend server, indica che il server di backend ha inviato il codice di stato della risposta405senza l'intestazioneAllow.- Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
Scorri verso il basso fino alla sezione Intestazioni errore / risposta dei dettagli della fase. e stabiliamo le 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, che indica che l'errore è causato dall'invio del backend 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 di accesso NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare
informazioni chiave sugli errori HTTP
502. Controlla i log di accesso NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dove: ORG, ORG e PORT# vengono sostituiti con valori effettivi.
- Cerca per vedere se ci sono errori
502con codice di erroreprotocol.http.Response405WithoutAllowHeaderper un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non hanno ancora avuto esito positivo502. Se trovi errori
502con il X-Apigee-fault-code che corrisponde alla valore diprotocol.http.Response405WithoutAllowHeader, quindi determina valore della X-Apigee-fault-source.Esempio di errore 502 nel log di accesso NGINX:
La voce di esempio riportata sopra dal log di accesso NGINX ha i seguenti valori per X-Apigee- codice di errore e fonte-fault-X-Apigee:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
Causa: risposta 405 senza intestazione Consenti dal server di backend
Diagnosi
- Determina il codice di errore e l'origine di errore per
502 Bad Gatewayutilizzando il monitoraggio delle API, lo strumento Trace o i log di accesso NGINX, come spiegato in Passaggi di diagnostica comuni. - Se il codice di errore è
protocol.http.Response405WithoutAllowHeadere L'origine errore ha il valoretarget, questo indica che il server di backend ha ha risposto con un codice di stato405senza l'intestazioneAllow. Pertanto, Apigee risponde con502 Bad Gatewaycon un 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 per inviare il codice di stato 405 con l'intestazione allow:
Assicurati che il server di backend rispetti sempre le specifiche RFC 7231, sezione 6.5.5: 405 Method Not Allowed e invia con lo stato
405includendo l'elenco dei metodi consentiti in un'intestazioneAllowcome mostrato di seguito:Allow: HTTP_METHODS
- Ad esempio, se il tuo server di backend consente
GET,POSTe metodiHEAD, devi assicurarti che l'intestazioneAllowcontenga come segue:Allow: GET, POST, HEAD
Gestione dei guasti
Opzione 2: utilizza la gestione dei guasti per inviare il codice di stato 405 con l'intestazione allow dall'API proxy:
Se il server di backend restituisce il codice di stato 405 senza il parametro Allow
puoi utilizzare la gestione degli errori per rispondere con il codice di stato 405 e
Allow dal proxy API nel seguente modo:
Crea un criterio come CriterioAssignMessage o il criterio RaiseFault e imposta il codice di stato su
405con l'intestazioneAllowe una .Esempio di criterioAssignMessage per l'invio di un errore 405 con l'intestazione Consenti:
<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 elemento
FaultRuleinTargetEndpoint, che richiami il criterio quando viene visualizzato l'errore502con il codice di erroreprotocol.http.Response405WithoutAllowHeader.Esempio di configurazione dell'endpoint di destinazione 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 IntestazioneAllow.
Configura proprietà
Opzione 3: configura la proprietà nel processore di messaggi per impedire ad Apigee Edge la restituzione di un errore 502
- Se sei un utente del cloud privato, puoi aggiornare la proprietà.
HTTP.ignore.allow_header.for.405atrueper impedire ad Apigee Edge generando un errore502, anche se il server di backend risponde con405senza l'intestazioneAllowutilizzando la Guida illustrativa: È in corso la configurazione dell'intestazione Ignora allow per la proprietà 405 nei processori di messaggi. - Se sei un utente del cloud pubblico, contatta l'assistenza Apigee Edge
Specifica
Apigee si aspetta la risposta 405 Method Not Allowed dal server di backend insieme
con l'intestazione Allow, in base alle seguenti specifiche:
| Specifica | |
|---|---|
| RFC 7231, sezione 6.5.5: 405 Method Not Allowed | |
| RFC 7231, sezione 7.4.1: Consenti |
Punti chiave da tenere presente
La soluzione consigliata è quella di correggere il server di backend per inviare il codice di stato 405
con l'intestazione Allow e rispettino le specifiche
.
RFC 7231, sezione 6.5.5: 405 Method Not Allowed.
Se hai ancora bisogno di aiuto dall'assistenza Apigee, vai a Raccogliere dati diagnostici.
Raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli i seguenti dati informazioni diagnostiche e contattare l'assistenza Apigee Edge.
Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
- Nome organizzazione
- Nome ambiente
- Nome proxy API
- Completa il comando
curlutilizzato per riprodurre l'errore502 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 proxy API
- File di traccia per le richieste API
Log di accesso NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dove: ORG, ORG e PORT# vengono sostituiti con valori effettivi.
- Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log