Quando si crea una raccolta tramite WebDAV, il nome della raccolta deve terminare con una barra
-
02-07-2019 - |
Domanda
Una libreria WebDAV che sto usando sta emettendo questa richiesta
MKCOL /collection HTTP/1.1
A cui Apache sta emettendo un 301 perché / collection esiste
HTTP/1.1 301 Location: /collection/
Piuttosto che un
HTTP/1.1 405 Method Not Allowed
Le specifiche sono un po 'vaghe su questo (o potrebbe essere la mia lettura di esso), ma quando si emette un MKCOL, il nome della propria raccolta dovrebbe sempre finire con una barra (in quanto è una raccolta)?
Soluzione
Il codice HTTP 301 significa "spostato in modo permanente" come sai.
Apache ti sta reindirizzando gentilmente all'URL corretto. Non può darti un 405 perché non esiste alcuna risorsa con l'URL che hai fornito. Ma non può nemmeno creare la risorsa con quell'URL esatto. Quello che può fare è creare la risorsa con l'URL corretto, quindi reindirizzare l'utente.
Ma per rispondere alla tua domanda, dovresti terminare le raccolte con " / " per rimuovere l'ambiguità, altrimenti il ??comportamento di normalizzazione dell'URI risultante dipende dal server credo. Non credo che l'aggiunta di una barra rovesciata sia obbligatoria per qualsiasi RFC.
EDIT:
MKCOL potrebbe avere successo senza la barra finale, ma si noti che la risorsa segnalata creata ha una barra finale.
Il server ha un'opzione, secondo RFC. Poiché determina la procedura di normalizzazione degli URL purché non violi le specifiche.
Il server può quindi provare a normalizzare qualsiasi URL inviato in ogni operazione, restituendo molti codici 3xx. Questo diventa costoso. Oppure può correggerti all'inizio (POST, MKCOL, ecc.), Quindi fallire o reindirizzare dopo.
Ma il punto chiave è che ti farà sempre sapere l'URL che preferisce.
Qualcosa sullo schema URL HTTP da RFC 2616
3.2.3 Confronto URI
Quando si confrontano due URI per decidere se corrispondono o no, un client
DOVREBBE utilizzare una distinzione tra maiuscole e minuscole confronto ottetto per ottetto del interi URI, con queste eccezioni:- A port that is empty or not given is equivalent to the default port for that URI-reference; - Comparisons of host names MUST be case-insensitive; - Comparisons of scheme names MUST be case-insensitive; - An empty abs_path is equivalent to an abs_path of "/".
Personaggi diversi da quelli in & Quot; riservato " e "non sicuro" set (vedi
RFC 2396 [42]) sono equivalenti ai loro & Quot; "% " HEX HEX " codifica.Ad esempio, i seguenti tre Gli URI sono equivalenti:
http://abc.com:80/~smith/home.html http://ABC.com/%7Esmith/home.html http://ABC.com:/%7esmith/home.html
Non accennare a come è definito abs_path. Inoltre, il server non può in alcun modo ignorare la barra in base alle specifiche. Quindi, emettendo un "MKCOL / collezione" e ottenere un normale 2xx creato senza nuove " / collection / " L'URL non è corretto.
AFAIK, i RFC correlati che definiscono abs_path non specificano la barra finale. Quindi dipende dal server su come confronta e normalizza quelli.