HTTP: Como devo mostrar Content-Type e Content-Disposition quando o cliente solicita um intervalo de bytes?
Pergunta
Perguntei sobre servindo intervalos de bytes do PHP. Hoje a minha pergunta é - como eu deveria definir Content-Type
e Content-Disposition
cabeçalhos ao servir vários intervalos de bytes solicitados? Devo repetir-los para cada intervalo de bytes ou devo apenas enviá-los uma vez no início? Ou talvez eu não deveria enviá-los em tudo, porque o cliente já deve saber o que ele está pedindo?
Solução
Geralmente, os cabeçalhos de resposta HTTP deve ser o mesmo (repetida) se você voltar todo o recurso ou apenas uma parte dele; Exceto, é claro para o cabeçalho Content-Range que irá variar.
Lembre-se que o HTTP é apátrida, por isso cada resposta deve ser completa e capaz de estar no seus próprios. Se servir intervalos de bytes, você realmente deve também estar usando tags entidade (ETags); de modo que não há nenhuma chance de que um cliente pode solicitar e obter dois intervalos de bytes separados que realmente pertencem a diferentes revisões do mesmo recurso.
Outras dicas
Tenha um olhar em RFC 2616 (Seções 14.16 e 19.2, em particular). Se o cliente solicitar um único intervalo de bytes, a resposta deve conter um único intervalo de bytes, e valores de cabeçalho Content-Type e Content-Disposition não mudança de comportamento (que deve refletir o tipo de arquivo que está sendo servido). No entanto, se o cliente solicita vários intervalos de bytes em uma única solicitação, a resposta deve usar um Content-Type de "multipart / byteranges" em vez, e cada parte dentro do corpo especifica seu próprio cabeçalho Content-Type.