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.Response405WithoutAllowHeader
come mostrato di seguito:Informazioni sul codice di errore
protocol.http.Response405WithoutAllowHeader
viene 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 è
target
e Codice di errore èprotocol.http.Response405WithoutAllowHeader
, questo indica che il backend server ha risposto con il codice di stato405 Method Not Allowed
senza 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 Gateway
oppure - Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo -
502 Bad Gateway
errore
- 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 risposta405
senza 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.Response405WithoutAllowHeader
etarget
rispettivamente, che indica che l'errore è causato dall'invio del backend Codice di stato della risposta405
senza l'intestazioneAllow
.Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-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
502
con codice di erroreprotocol.http.Response405WithoutAllowHeader
per 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
502
con 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.Response405WithoutAllowHeader
X-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 Gateway
utilizzando 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.Response405WithoutAllowHeader
e L'origine errore ha il valoretarget
, questo indica che il server di backend ha ha risposto con un codice di stato405
senza l'intestazioneAllow
. Pertanto, Apigee risponde con502 Bad Gateway
con 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
405
includendo l'elenco dei metodi consentiti in un'intestazioneAllow
come mostrato di seguito:Allow: HTTP_METHODS
- Ad esempio, se il tuo server di backend consente
GET
,POST
e metodiHEAD
, devi assicurarti che l'intestazioneAllow
contenga 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
405
con l'intestazioneAllow
e 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
FaultRule
inTargetEndpoint
, che richiami il criterio quando viene visualizzato l'errore502
con 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
405
con 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.405
atrue
per impedire ad Apigee Edge generando un errore502
, anche se il server di backend risponde con405
senza l'intestazioneAllow
utilizzando 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
curl
utilizzato per riprodurre l'errore502 Bad Gateway
con 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