Ich verstehe, dass die Direktive „charset utf-8“ in einem HTTP- oder Serverblock einer Konfigurationsdatei dazu führen sollte, dass nginx „Content-Type: text/html; charset=utf-8“ in die Header einer Antwort einschließt, statt nur „Content-Type: text/html“.
Ich habe diese Direktive jedoch sowohl dem http-Block als auch dem entsprechenden Serverblock hinzugefügt und die Direktive „Content-Type“ ist unverändert geblieben.
Zu den getroffenen Vorsichtsmaßnahmen gehören: 1. Neuladen oder Neustarten von nginx nach jeder Konfigurationsänderung. 2. Einfügen einer Direktive „charset_types text/html text/plain;“ davor. 3. Vornehmen einer nicht damit zusammenhängenden Konfigurationsänderung und Überprüfen, ob diese tatsächlich den erwarteten Effekt hat.
Ich habe mir die entsprechenden Diskussionen hier und in der Nginx-Dokumentation angesehen und keine Erklärung gefunden.
Antwort1
charset utf-8;
in Ihrem Server{}-Block sollte alles sein, was Sie tun müssen. Basierend auf der Nginx-Dokumentation hier
http://nginx.org/en/docs/http/ngx_http_charset_module.html#source_charset
Sie können dies in HTTP-, Server- oder Standortkontexten platzieren.
Antwort2
Vielen Dank für die Antworten. Mir ist endlich aufgefallen, dass ich mir die Header einer 301-Antwort angesehen habe. URLs ohne abschließenden Schrägstrich werden auf dieselben URLs mit abschließendem Schrägstrich umgeleitet. Die 301-Antwort hat „text/html“ als Inhaltstyp. Aber die folgende Antwort nach der Umleitung hat „text/html; charset=utf-8“ als Inhaltstyp. Ich weiß nicht, wie nützlich es ist, dass die 301-Antwort den charset-Parameter deklariert, aber da sie text/html als Inhaltstyp deklariert, sollten wir, wenn die nginx-Konfiguration charset im http-Block festlegt, nicht auch charset in der 301-Antwort erwarten? Die nginx-Version ist 1.10.3 (Ubuntu).