node.js - query - res.json express




Perché POST reindirizza a GET e PUT reindirizza a PUT? (2)

Per prima cosa, capiamo cosa fa res.redirect :

res.redirect ([status,] percorso)

Reindirizza all'URL derivato dal percorso specificato, con lo stato del codice di stato HTTP specificato. Se non si specifica lo stato, il codice di stato viene impostato su "302" Trovato ".

Se guardiamo le specifiche HTTP 1.1 per una risposta 302 , vediamo

Nota: per ragioni storiche, un agente utente PU MAY cambiare il metodo di richiesta da POST a GET per la richiesta successiva. Se questo comportamento non è desiderato, è possibile utilizzare il codice di stato 307 (temporaneo reindirizzamento).

Una richiesta 307 manterrà il verbo HTTP in tutti i casi, ma non è quello che vuoi. Vuoi che il verbo cambi in GET. In tal caso, vuoi un 303 :

303 Vedi Altro

Il codice di stato 303 (Vedi altro) indica che il server sta reindirizzando l'agente utente a una risorsa diversa, come indicato da un URI nel campo dell'intestazione Location, che è destinato a fornire una risposta indiretta alla richiesta originale. Un agente utente può eseguire una richiesta di recupero indirizzando l'URI ( una richiesta GET o HEAD se si utilizza HTTP ), che potrebbe anche essere reindirizzato e presentare il risultato finale come risposta alla richiesta originale.

Una risposta 303 richiederà al client (a condizione che comprenda HTTP 1.1) di eseguire una richiesta GET sulla risorsa specificata. Quindi, fornisci semplicemente un codice di stato 303 nei tuoi reindirizzamenti:

res.redirect(303, '/test')

Sto usando express 4.13.3 (ultimo) e codice seguente:

var express = require('express')

var app = express()

app.get('/test', function (req, res, next) {
  res.send('hello!')
})

app.post('/test', function (req, res, next) {
  res.redirect('/test')
})

app.put('/test', function (req, res, next) {
  res.redirect('/test')
})

app.listen(5001)

// GET /test -> 'hello!'
// POST /test -> 'hello!'
// PUT /test -> ERR_TOO_MANY_REDIRECTS

POST reindirizza a GET ma PUT reindirizza a PUT. È possibile effettuare il reindirizzamento PUT su GET (come per il POST)?


Il modo di mettere è corretto, stai reindirizzando la richiesta in un'altra posizione, ma il metodo http è lo stesso. E questo è il motivo per cui sta cercando di accedere nuovamente. (Non stai cambiando il metodo http).

Perché post sta reindirizzando per get

Ecco la risposta .





express