Al crear una colección a través de WebDAV, el nombre de la colección debe terminar con una barra inclinada

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Una biblioteca WebDAV que estoy usando está emitiendo esta solicitud

MKCOL /collection HTTP/1.1

A qué apache está emitiendo un 301 porque / collection existe

HTTP/1.1 301
Location: /collection/

En lugar de

HTTP/1.1 405 Method Not Allowed

La especificación es un poco vaga en esto (o podría ser mi lectura), pero cuando se emite un MKCOL, ¿debería el nombre de su colección terminar siempre con una barra (ya que es una colección)?

¿Fue útil?

Solución

El Código HTTP 301 significa " Movido permanentemente " como ustedes saben.

Apache te está redirigiendo gentilmente a la URL correcta. No puede darle un 405 porque no existe ningún recurso con la URL que proporcionó. Pero tampoco puede crear el recurso con esa URL exacta. Lo que puede hacer es crear el recurso con la URL adecuada y luego redirigirlo.

Pero para responder a su pregunta, debe finalizar las colecciones con " / " para eliminar la ambigüedad, de lo contrario, el comportamiento de normalización de URI resultante depende del servidor que creo. No creo que agregar que la barra diagonal final es obligatoria por cualquier RFC.

EDITAR:

El MKCOL puede tener éxito sin la barra diagonal final, pero observe que el recurso reportado creado tiene una barra diagonal final.

El servidor tiene una opción, de acuerdo con el RFC. Ya que determina el procedimiento de normalización de URL siempre y cuando no viole la especificación.

El servidor puede intentar normalizar cada vez que se envía la URL en cada operación, devolviendo muchos códigos 3xx. Esto se pone caro. O puede corregirlo al principio (POST, MKCOL, etc.) y luego fallar o redirigir después de eso.

Pero el punto clave es que siempre te hará saber la URL que prefiere.

Algo sobre el esquema de URL HTTP de RFC 2616

  

3.2.3 Comparación de URI

     

Al comparar dos URIs para decidir   Si coinciden o no, un cliente
  DEBE utilizar un caso sensible   comparación octeto a octeto de la   URI completos, con estas excepciones:

  - 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 "/".
     

Caracteres distintos a los de la   " reservado " y " inseguro " conjuntos (ver
  RFC 2396 [42]) son equivalentes a sus   " "% " HEX HEX " codificación.

     

Por ejemplo, los siguientes tres   Los URI son equivalentes:

  http://abc.com:80/~smith/home.html
  http://ABC.com/%7Esmith/home.html
  http://ABC.com:/%7esmith/home.html

Observe que no se menciona cómo se define abs_path. Además, el servidor no puede, estrictamente hablando, ignorar su barra oblicua de acuerdo con la especificación. Por lo tanto, emitir un " MKCOL / collection " y obtener un 2xx regular sin nuevo " / collection / " La URL es incorrecta.

AFAIK, los RFC relacionados que definen abs_path no especifican la barra diagonal final. Así que depende del servidor la forma en que compara y normaliza esos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top