Quando si crea una raccolta tramite WebDAV, il nome della raccolta deve terminare con una barra

StackOverflow https://stackoverflow.com/questions/131754

  •  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)?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top