Problem mit CORS und Javascript-Client? Falsch! client_max_body_size war nicht richtig eingestellt beim Versuch, über einen benutzerdefinierten API-Endpunkt hochzuladen

Ich versuche, Dateien über einen benutzerdefinierten Endpunkt und eine Benutzer-API von meiner Website aus hochzuladen.

Ich kann mich nur mit einem Admin-Benutzer anmelden.
Ich kann praktisch alles andere tun, außer Dateien hochzuladen.

> [Fehler] Ursprung https://my.domain ist von Access-Control-Allow-Origin nicht erlaubt.
> [Fehler] Die Fetch API kann https://my.domain/m/upload.json aufgrund von Zugriffskontrollprüfungen nicht laden.
> [Fehler] Fehler beim Laden der Ressource: Ursprung https://my.domain ist von Access-Control-Allow-Origin nicht erlaubt. (upload.json, Zeile 0)
> [Log] API-CALL-ERROR – "/m/upload.json" – TypeError: Ursprung https://my.domain ist von Access-Control-Allow-Origin nicht erlaubt. (app.8eb0470a.chunk.js, Zeile 1)
> TypeError: Ursprung https://my.domain ist von Access-Control-Allow-Origin nicht erlaubt.

Ich habe https://my.domain und http://localhost:19006 (zum Testen) in den CORS-Einstellungen hinzugefügt und DISCOURSE_ENABLE_CORS true in app.yml gesetzt.

Ich habe auch versucht, https://my.domain in DISCOURSE_CORS_ORIGIN in app.yml hinzuzufügen, aber auch das hat nicht funktioniert.

Was übersehe ich?

Das Einzige, was ich in /shared/log/rails/production.log sehe, ist Screen Shot 2020-09-16 at 14.44.02

TL;DR
Überprüfe alle betroffenen Nginx- oder Server-Instanzen. In meinem Fall waren es drei: die Website, der Discourse-Docker-Container und innerhalb des Discourse-Docker-Containers. client_max_body_size sollte auf das gewünschte Limit für Uploads eingestellt werden.

Ich habe ‘client_max_body_size 999m’ gewählt, einfach weil ich das Limit ausschließlich über die Discourse-Einstellungen steuern wollte. Du kannst diese Zeile innerhalb der http- oder server-Tags in der nginx.conf hinzufügen. Ich füge sie lieber ganz ans Ende ein, nur um auf der sicheren Seite zu sein :slight_smile:

Ausführlichere Version:
Nach einem ganzen Tag des Suchens und Herunterladens von Firefox (was ich für die Webentwicklung wärmstens empfehle) habe ich herausgefunden, dass der Grund für mein Upload-Problem das von Nginx innerhalb des Discourse-Docker-Containers gesetzte Limit war (manche mögen sagen: ja, aber das wird beim Neuaufbau des Launchers dynamisch gesetzt … – ich möchte aber lieber sicher sein :)). Dann kam noch hinzu, dass unser eigener Nginx, der das Docker-Image hostet, kein Limit gesetzt hatte und somit standardmäßig auf ‘client_max_body_size 1MiB’ stand, was leider nicht ausreicht :). Nachdem ich das ebenfalls geändert hatte, musste ich noch zum Frontend-Nginx gehen und auch dort das Limit anpassen. Drei Änderungen, sechs Stunden mit der Verwaltung von CORS-Vorab-Anfragen (Preflight Requests) in Nginx und ein bisschen Stress später, funktioniert es jetzt.

2 „Gefällt mir“