Problema com CORS e cliente Javascript? Errado! client_max_body_size não foi configurado corretamente ao tentar fazer upload via Endpoint de API personalizado

Estou tentando fazer upload de arquivos por meio de um endpoint personalizado usando uma API de usuário do meu site.

Consigo fazer login apenas com um usuário administrador.

Posso fazer literalmente qualquer outra coisa, exceto fazer upload de arquivos.

> [Erro] A origem https://my.domain não é permitida pelo Access-Control-Allow-Origin.
> [Erro] A Fetch API não conseguiu carregar https://my.domain/m/upload.json devido a verificações de controle de acesso.
> [Erro] Falha ao carregar recurso: A origem https://my.domain não é permitida pelo Access-Control-Allow-Origin. (upload.json, linha 0)
> [Log] API-CALL-ERROR – "/m/upload.json" – TypeError: A origem https://my.domain não é permitida pelo Access-Control-Allow-Origin. (app.8eb0470a.chunk.js, linha 1)
> TypeError: A origem https://my.domain não é permitida pelo Access-Control-Allow-Origin.

Adicionei https://my.domain e http://localhost:19006 (para testes) nas configurações de CORS e também adicionei DISCOURSE_ENABLE_CORS true ao app.yml.

Também tentei adicionar https://my.domain em DISCOURSE_CORS_ORIGIN no app.yml, mas isso também não funcionou.

O que estou esquecendo?

A única coisa que vejo em /shared/log/rails/production.log é Screen Shot 2020-09-16 at 14.44.02

TL;DR
Verifique todos os servidores nginx ou servidores envolvidos. No meu caso, foram 3: o site, o Docker do Discourse e, dentro do Docker do Discourse. O client_max_body_size deve ser definido para o limite desejado ao fazer upload.

Eu escolhi client_max_body_size 999m apenas porque queria limitar isso apenas pelas configurações do Discourse. Você pode adicionar essa linha dentro das tags http ou server no arquivo nginx.conf. Eu prefiro adicioná-la na última linha, só para garantir :slight_smile:

Versão mais longa:
Depois de um dia inteiro vasculhando e baixando o Firefox… recomendo totalmente para desenvolvimento web. Descobri que o motivo pelo qual não conseguia fazer upload era devido ao limite definido pelo nginx dentro do contêiner Docker do Discourse (alguns podem dizer: “sim… mas isso é definido dinamicamente quando o launcher é reconstruído”… - eu prefiro ter certeza :slight_smile: ). Além disso, havia o fato de que nosso próprio nginx que hospeda a imagem Docker não tinha um limite definido, o que resultava no padrão client_max_body_size 1MiB, o que não é suficiente :). Após alterar isso também, precisei ir ao nginx do front-end e fazer a alteração lá também. 3 alterações, 6 horas lidando com o gerenciamento de solicitações pré-voo CORS no nginx e um pouco de estresse, e agora funciona.

2 curtidas