Hostwinds Blog
Cerca risultati per:
Ogni codice di stato HTTP racconta una storia su ciò che sta accadendo tra un client (ad esempio browser Web) e un server.Alcune storie sono semplici;200 significa successo, 404 significa che la pagina non esiste.Ma quando vedi il metodo 405 non consentito, la storia è un po 'più interessante.
Rompi cosa significa l'errore 405, perché accade e come risolverlo
Il metodo 405 non consentito la risposta si verifica quando un client (come il browser o uno strumento API) effettua una richiesta utilizzando un metodo HTTP che il server non consente tale risorsa.
Per esempio:
Il dettaglio importante è che la pagina che stai cercando di raggiungere esiste, ma il metodo di richiesta utilizzato per interagire con esso non è consentito dal server.
L'errore 405 non ha sempre una sola causa ovvia.Può provenire dal modo in cui viene presentata una richiesta, come è configurato il server o anche da livelli di sicurezza extra.Ecco le situazioni più comuni che lo innescherebbero:
Ogni risorsa su un server è impostata per accettare determinati metodi HTTP.Per esempio:
Uno scenario comune è quando uno sviluppatore invia un INVIARE Richiesta a un URL che è stato progettato solo per gestire OTTENERE.Il server riconosce la risorsa, ma poiché il metodo non è supportato, risponde con 405.
Questa è una delle cause più frequenti, specialmente quando si lavora con forme, API o script che interagiscono con i servizi web.
I server Web come Apache, Nginx e IIS danno il controllo degli amministratori su cui sono consentiti i metodi HTTP.Le direttive di configurazione come il limite di Apache o il limite di nginx possono bloccare esplicitamente determinati verbi.
Ad esempio:
Questo può spesso accadere dopo le modifiche a .htaccess file, blocchi server o impostazioni di filtraggio richieste IIS.Anche un piccolo errore di battitura o una direttiva trascurata può comportare che i metodi siano involontariamente bloccati.
Le API sono progettate con rigide regole del metodo.In un'API riposante, diversi verbi HTTP di solito corrispondono ad azioni specifiche:
Se uno sviluppatore chiama un endpoint con il metodo sbagliato, come l'invio a METTERE a un URL che consente solo INVIARE, il server risponde con un 405.
Questo è intenzionale, poiché le API hanno lo scopo di imporre modelli di interazione coerenti.Ad esempio, l'API di GitHub non te lo permetterà ELIMINARE Un repository per errore tramite una chiamata metodo errata, richiede il verbo corretto o otterrai una risposta 405.
Le richieste di moduli Web e JavaScript (AJAX) sono un'altra fonte comune di 405 errori:
Poiché i browser gestiscono automaticamente i browser e le comunicazioni AJAX, anche una piccola mancata corrispondenza nel modo in cui viene codificata una richiesta rispetto al modo in cui il server si aspetta che possa attivare questo errore.
I principianti spesso lo incontrano quando imparano a impostare i moduli in PHP o quando lavorano con i framework di frontend che effettuano chiamate API.
Anche quando un server è configurato correttamente, i livelli di sicurezza possono intervenire e bloccare le richieste.Esempi includono:
In questi casi, il server stesso potrebbe supportare il metodo, ma la richiesta viene intercettata prima che raggiunga l'applicazione.Questo spesso porta alla confusione perché i registri possono mostrare il server "rifiutare" il metodo quando in realtà è un livello di sicurezza che fa il filtro.
A prima vista, l'errore 405 può essere confuso Altri errori di client e server.Ma i dettagli contano e conoscere le differenze ti aiuterà a diagnosticare correttamente.
Può essere difficile diagnosticare il 405 perché il server sta riconoscendo che esiste la risorsa, ma si rifiuta di elaborare la richiesta nel modo in cui è stata inviata.Per rintracciare la causa principale, aiuta a risolvere il problema passo dopo passo.
Quando un server restituisce un 405, la risposta dovrebbe includere un elenco di intestazioni consentire quali metodi sono supportati per quella risorsa.Questo è il modo di dire del server: "Non puoi farlo, ma ecco cosa puoi fare".
Esempio:
HTTP/1.1 405 Method Not Allowed
Allow: GET, POST
I registri sono spesso il modo più veloce per scoprire la causa in quanto in genere forniranno una spiegazione diretta del perché la richiesta sia stata respinta e conferma che non è un problema di connettività più profondo.
I registri possono mostrare voci come:
client sent an unsupported method (PUT) to /index.php
Strumenti come arricciare o Postino sono preziosi per confermare quali metodi funzionano effettivamente.Il test degli endpoint in questo modo esclude le congetture e ti dà una chiara visibilità su come il server risponde a diverse richieste.
Usando Curl:
curl -i -X GET https://example.com/resource
curl -i -X POST https://example.com/resource
curl -i -X PUT https://example.com/resource
Postman fornisce un'interfaccia visiva in cui è possibile attivare i metodi di richiesta e vedere istantaneamente le risposte, rendendolo più adatto ai principianti.
Se il server consente il metodo ma stai ancora ottenendo un 405, il problema potrebbe essere nel codice dell'applicazione.
Forme: Assicurati che l'attributo del metodo <form> dell'elemento corrisponda a ciò che il server si aspetta.Esempio:
<form action="/submit" method="post">
Ajax/Fetch: Verificare che il metodo di richiesta sia impostato correttamente in JavaScript:
fetch('/api/data', {
method: 'POST'
})
Nota: Questo passaggio è spesso dove i principianti vengono inciampati, inviando dati all'endpoint giusto ma con il verbo sbagliato.
Se sia le intestazioni che il codice hanno un bell'aspetto, il problema potrebbe essere restrizioni a livello di server.Gli amministratori spesso bloccano i metodi per motivi di sicurezza, ma se vengono arrestate richieste legittime, è necessaria la regolazione di queste impostazioni.
Apache: Cerca le direttive limite o limitexcept nella tua configurazione .htaccess o principale.Esempio:
<Limit GET POST>
Require all granted
</Limit>
Nginx: Controlla le direttive limite_except:
location /api/ {
limit_except GET POST {
deny all;
}
}
La correzione di un errore 405 dipende dalla piattaforma o dall'ambiente su cui è in esecuzione il sito Web o l'applicazione.Poiché ogni tipo di server e sistema di gestione dei contenuti gestisce le richieste HTTP in modo diverso, la soluzione può variare.Passiamo ad alcune piattaforme comuni e camminiamo attraverso i passaggi che possiamo intraprendere per rivedere le configurazioni e regolare le impostazioni in modo che siano consentiti i metodi HTTP corretti.
1. Riprodurre l'errore e leggi le intestazioni
curl -i -X PUT https://example.com/path
2. Se si vede, regola la richiesta/client in modo da abbinare.Se non lo fai, continua sotto.
1.Locate config
2. Esegui il file che modificherai
sudo cp /etc/apache2/sites-available/site.conf /etc/apache2/sites-available/site.conf.bak
3. Cerca le restrizioni del metodo
# Example: only GET/POST allowed here
<LimitExcept GET POST>
Require all denied
</LimitExcept>
4. Aggiungere i metodi necessari o rimuovere il blocco restrittivo
<LimitExcept GET POST PUT>
Require all denied
</LimitExcept>
5. Convalida e ricarica
sudo apachectl -t
sudo systemctl reload apache2 # or: sudo systemctl reload httpd
6. Ritestare con Curl
curl -i -X PUT https://example.com/path
7. Se ancora bloccato, controlla i livelli di sicurezza (ad es. Registri di audit Mod_Security) e la precedenza di VirtualHost.
1. Aprire il blocco server per il tuo sito
2. Eseguire il backup del file
sudo cp /etc/nginx/sites-available/site.conf /etc/nginx/sites-available/site.conf.bak
3. Cerca limit_except blocchi
location /api/ {
limit_except GET POST {
deny all;
}
}
4. Aggiungere i metodi necessari o rimuovere il blocco se non necessario
location /api/ {
limit_except GET POST PUT {
allow all;
}
}
5. Test e ricarica
sudo nginx -t
sudo systemctl reload nginx
6. Ritestare con Curl
curl -i -X PUT https://example.com/api/resource
7. Se si proxy a un server di app, confermare upstream consente anche il metodo.
<system.webServer>
<handlers> ... </handlers>
<security>
<requestFiltering>
<verbs>
<!-- Remove Deny for verbs you need -->
<add verb="PUT" allowed="true" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
6. Ricicla il pool di app o riavvia il sito.
7. Testest con Curl/Postman.
1. Confirma il contratto
2, sondare l'endpoint
# Discover allowed methods (if supported)
curl -i -X OPTIONS https://api.example.com/v1/items/123
# Then try the method you intend
curl -i -X PATCH https://api.example.com/v1/items/123
3. Correggi client o server (esempi)
app.post('/items', createItem);
app.put('/items/:id', updateItem);
// If PUT not defined, add it—or switch your client to POST if that's the design.
@app.route('/items/<id>', methods=['GET','POST','PUT','DELETE'])
def item(id): ...
4. Imposta un utile 405 con header consenti (lato server)
5. Se fronteggiati da un gateway API/WAF, revisione delle regole di filtraggio del metodo anche lì.
6. Ritestare con Postman/Curl e confermare il flusso 2xx/3xx/4xx previsto.
Risolvere un errore 405 quando sembra essere solo la metà della sfida: sostenere che accade di nuovo è ciò che ti fa risparmiare tempo e frustrazione a lungo termine.Mettendo in atto le giuste pratiche durante lo sviluppo e la configurazione, è possibile ridurre le possibilità di utenti o applicazioni che si svolgono in metodi non supportati.Ecco diversi approcci che aiutano a impedire a 405 errori di diventare problemi ricorrenti.
Quando si scrivono moduli, script o chiamate API, ricontrollare che si utilizzano solo metodi HTTP che il server consente.Ad esempio, se il tuo server accetta Post per l'invio di dati, assicurarsi di non utilizzare accidentalmente GET o PUT.Convalidando i metodi all'inizio dello sviluppo aiuta anche a catturare errori prima di raggiungere la produzione.Molti framework consentono di definire metodi consentiti direttamente in percorsi o controller, rendendo più facile applicare l'utilizzo corretto.
I server hanno spesso restrizioni del metodo definite nei loro file di configurazione (come .htaccess, nginx.conf o impostazioni del gateway API).Tenere record di quali metodi sono supportati rende più facile per gli sviluppatori e gli amministratori comprendere i limiti.Questa documentazione è particolarmente utile in team più grandi o progetti a lungo termine, in cui le regole del server possono altrimenti perdersi o dimenticare nel tempo.
Anche con un'attenta pianificazione, potrebbero scivolare richieste di metodi non supportati.Ecco perché è utile fornire messaggi di errore chiari quando si verifica un 405.Invece di un vago "non consentito", personalizza la risposta in modo che l'utente o lo sviluppatore comprendano cosa è andato storto e come correggerlo, ad esempio includendo l'elenco dei metodi consentiti nell'intestazione della risposta o suggerendo il metodo giusto nella documentazione.
Se stai costruendo API, attenersi alle migliori pratiche e agli standard HTTP rende più facile per i clienti sapere cosa aspettarsi.Ad esempio, se si progetta un endpoint per l'aggiornamento di una risorsa, utilizzare put o patch in modo coerente.Questa prevedibilità riduce il rischio che vengano inviati metodi non supportati e aiuta gli sviluppatori esterni a interagire correttamente con l'API.
Il metodo 405 non consentito l'errore indica che il server sa che esiste la risorsa, ma non consente il metodo che hai provato.
Il takeaway chiave: Controlla l'intestazione di consumo, rivedi i registri e assicurati che le regole del codice e del server abbinano i metodi che intendi supportare.
Scritto da Hostwinds Team / agosto 27, 2025