Ao criar uma colecção através do WebDAV deve o nome do fim coleção com uma barra

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

  •  02-07-2019
  •  | 
  •  

Pergunta

A WebDAV biblioteca que estou usando está a emitir este pedido

MKCOL /collection HTTP/1.1

Para que Apache está a emitir um 301 porque / recolha existe

HTTP/1.1 301
Location: /collection/

Em vez de um

HTTP/1.1 405 Method Not Allowed

A especificação é um pouco vago sobre isso (ou poderia ser minha leitura dele), mas quando a emissão de uma MKCOL, deve o nome da sua coleção sempre terminam com uma barra (como é uma coleção)?

Foi útil?

Solução

HTTP código 301 significa "movido permanentemente" como você sabe.

O Apache é graciosamente redirecionando você para o URL adequado. Ele não pode dar-lhe um 405 porque não existe um recurso com o URL que você forneceu. Mas não pode criar o recurso com esse URL exato tampouco. O que pode fazer é criar o recurso com a URL correta, em seguida, redirecioná-lo.

Mas, para responder sua pergunta, você deve terminar coleções com "/" para ambigüidade remover, caso contrário, o comportamento normalização URI resultante é até o servidor que eu acredito. Eu não acredito acrescentando que barra final é obrigatória por qualquer RFC.

EDIT:

O MKCOL pode ter sucesso sem a barra final, mas aviso que o recurso relataram criado tem uma barra final.

O servidor tem uma opção, de acordo com a RFC. Uma vez que determina o procedimento de normalização URL, desde que ele não viola a spec.

O servidor pode então tentar normalizar nunca URL de enviá-lo da maneira em cada operação, voltando muitas 3xx códigos. Isto torna-se caro. Ou pode corrigi-lo no início (POST, MKCOL, etc.), em seguida, falhar ou redirecionamento depois disso.

Mas o ponto-chave é que ele sempre vai deixar você saber o URL que prefere.

Algo no Esquema URL HTTP de RFC 2616

3.2.3 URI Comparação

Ao comparar dois URIs para decidir se eles combinam ou não, um
cliente Deve usar um case-sensitive octeto-por-octeto comparação do URIs inteiro, com as seguintes exceções:

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

outros do que aqueles no Personagens "Reservados" e conjuntos de "inseguros" (ver
RFC 2396 [42]) são equivalentes às suas "" % "HEX HEX" codificação.

Por exemplo, os três seguintes URIs são equivalentes:

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

Observe nenhuma menção sobre como abs_path está definida. Além disso, o servidor não pode estritamente falando ignorar o seu corte seja de acordo com a especificação. Assim, a emissão de uma "MKCOL / colecção" e conseguir um 2xx regular criada com nenhum novo "/ coleta /" URL está incorreto.

AFAIK, RFCs relacionados que definem abs_path não especificar a barra no final. Portanto, cabe ao servidor em como ele se compara e normaliza os.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top