Acabei de notar que o Discourse está enviando cabeçalhos Content-type incorretos para vários tipos de arquivo: arquivos mp4 de /uploads/ estão com content-type: application/mp4 em vez de video/mp4
meus uploads vieram do S3, então a culpa é do provedor de hospedagem S3.
Alguns arquivos javascript (.js) por exemplo de /brotli_asset/ estão com application/javascript em vez de text/javascript.
Eu uso discourse_docker sem nenhuma modificação, verifiquei o nginx incluído, ele contém o arquivo de configuração mime-types correto. Parece que é o backend do Discourse o culpado por enviar esses mime-types incorretos.
Olá! Pelo que entendi, o problema com os uploads estava do meu lado e foi causado pelo provedor S3 (consegui resolvê-lo substituindo a configuração no meu nginx). E o problema com o JS de /brotli_asset/ está em algum lugar no nginx “interno” do discourse, então parece ser um bug no discourse_docker.
Que vergonha, mas não consegui encontrar um lugar melhor para relatar o bug do que esta parte do fórum. Você pode me indicar, por favor?
Em poucas palavras, o Discourse envia JavaScript de locais diferentes com diferentes tipos MIME. Por exemplo, /theme-javascripts/ff3c633d0d4192c83a194066eaa9d823b5c2d8f6.js vai com text/javascript (correto) e o /brotli_asset/... mencionado anteriormente com application/javascript. Isso pode confundir servidores proxy entre o Discourse e o cliente, bem como sistemas de análise, onde notei o problema.
Parece que você só precisa configurar corretamente o Nginx interno na imagem Docker do Discourse para os assets brotli.
Nos meus relatórios do goaccess, o painel de tipos MIME do discourse está com valores divididos para js: um para text/javascript e outro para application/javascript.
O segundo: as diretivas gzip_types e brotli_types no nginx são operadas por tipos MIME. Portanto, para o discourse, as pessoas precisam configurar tanto o text/javascript correto quanto o application/javascript incorreto.
O mesmo para qualquer proxy que recompacta conteúdo com base no tipo MIME.
Ao carregar o URL do vídeo, os cabeçalhos são diferentes entre uma instalação regular e uma instalação de desenvolvimento.
Na instalação de produção regular, o tipo de conteúdo do vídeo é definido como application/mp4, enquanto é definido como video/mp4 em uma instalação de desenvolvimento.
Crossposting Discourse send PDF inline porque o autor corrigiu um comportamento indesejado semelhante com PDFs.
Estou todo ouvidos se alguém tiver uma solução para evitar que mp4s sejam baixados à força.
Embora, olhando mais a fundo nossa implementação do uploader S3, eu vejo que estamos adicionando o cabeçalho Content-Disposition"attachment" para praticamente qualquer upload que não seja uma imagem, mas parece que ele foi pensado apenas para ser adicionado para svgs. Usar "attachment" faria com que o conteúdo fosse baixado em vez de aberto em uma nova aba. Para vídeos, é uma mistura de application/video e attachment que está causando isso.
Podemos pelo menos remover este cabeçalho, eu acho.
Não tenho certeza se entendi completamente, então uma pergunta rápida sobre este PR
Por que as modificações visam especificamente arquivos relacionados ao s3, quando o download forçado ocorre mesmo sem usar s3?
Isso corrigirá o problema em geral de qualquer maneira?
Isso também corrigirá o download forçado para outros arquivos que podem ser abertos no navegador, como PDFs?
Ao fazer upload para o S3, precisamos especificar cabeçalhos como Content-Disposition e Content-Type do arquivo. Estes são os valores que serão retornados ao carregar o arquivo - PutObject - Amazon Simple Storage Service
Você pode explicar quando isso está acontecendo?
O PR removerá o cabeçalho Content-Disposition: attachment, que força o download independentemente do navegador que você usa.
Depois de atualizar seu site, o Content-Type é usado em vez disso, e o navegador decidirá o que fazer com ele. Uma coisa a notar é que não há problema com Content-Type: application/mp4 no Safari e Firefox, mas no Chrome, ele ainda força um download (provavelmente devido a algum histórico ruim que o Chrome tem com o tipo de arquivo mp4).