Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
špatná-praxe:http-content-type [2017/12/01 15:05] – vytvořeno Jakub Klímekšpatná-praxe:http-content-type [2020/06/03 09:37] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
-====== Chyná hlavička HTTP Content-Type ====== +====== Chybná hlavička HTTP Content-Type ====== 
-I u CSV souboru se správným kódováním ''UTF-8'' vystaveném na webu se může stát, že se diakritika v takovém souboru v prohlížeči nebude zobrazovat správně+Otevřená data se vystavují na webu a jsou přístupná typicky přes protokol HTTP(S). 
-Pravděpodobně je na vině špatná HTTP hlavička ''Content-Type''odpovědi se souboremkterá by správně měla být ''Content-Typetext/csv; charset=utf-8''+Ten má svá pravidla, která je pro správné fungování webu nutné dodržovat. 
-Vyskytují se ale ípady, kdy hodnotě chybí kódovánítj''Content-Type: text/csv''tedy prohlížeč neví, že má zobrazovat kódování UTF-8, nebo je dokonce indikován špatný typ, například ''Content-Typetext/plain'' nebo ''Content-Typeapplication/octet-stream''.+Jedno z pravidel se týká indikace toho, jaký je formát zdroje (stránky, souboru) je přenášen. 
 +Webový server tedy v odpovědi na požadavek klienta na stažení souboru posílá nejen obsah samotný, ale i metainformace, tzv. HTTP hlavičky. 
 +Ty si můžeme zobrazit pomocí standardního nástroje curl: ''curl -I <URL>''nebo ve vývojářské konzoli běžného webového prohlížeče
 +V jedné z nejdůležitějších hlaviček server klientovi sděluje, v jakém formátu jsou přenášená data. 
 +Jedná se o HTTP hlavičku ''Content-Type'' a hodnotou této hlavičce je tzv. Media Typenebo také [[https://www.iana.org/assignments/media-types/|MIME Type]], který například pro CSV soubory je ''text/csv''
 +Je-li tato hlavička nastavena špatně, může dojít k chybné interpretaci enášených dat. 
 +Hodnota této hlavičce by tedy měla odpovídat jak přenášenému obsahutak také hodnotě uvedené v metadatech distribuce datové sady. 
 +Toto se týká každého zdroje na webuv kontextu otevřených dat tedy zejména souborů s datydatových schémat, podmínek užití dokumentací datových sad. 
 +Důležitou roli zde hraje taky správně [[špatná-praxe:komprese|implementovaná komprese]]. 
 +===== Seznam nejpoužívanějších datových typů a odpovídajících MIME typů ===== 
 +[[https://www.iana.org/assignments/media-types/|Úplný seznam MIME typů]] spravuje [[https://www.iana.org/|IANA]] Autorita pro přidělování čísel (identifikátorů) na Internetu.
  
-===== Řešení ===== +^ Formát dat                                                         ^ MIME-typ                 ^ 
-Je třeba nakonfigurovat webový server takaby soubory CSV poskytoval se správnou hlavičkou ''Content-Type: text/csv; charset=utf-8''+| CSV soubor                                                         | ''text/csv''             | 
-Například pro webový server ''nginx'' je třeba použít v konfiguraci ''charset utf-8;'' a ujistit se, že v hodnotě ''charset-types'' je uvedeno ''text/csv''.+| Schéma pro CSV dle [[https://www.w3.org/standards/techs/csv#w3c_all|CSV on the Web]]    | ''application/csvm+json''
 +| Schéma pro CSV dle [[https://frictionlessdata.io/specs/table-schema/|Table Schema]]     | ''application/json''      | 
 +| JSON soubor                                                        | ''application/json''     | 
 +| Schéma pro JSON soubor                                             | ''application/json''     | 
 +| XML soubor s převážně strukturovaným obsahem                       | ''application/xml''      | 
 +| XML soubor s převážně textovým obsahem                             | ''text/xml''             |  
 +| Schéma pro XML dle [[https://www.w3.org/XML/Schema|XML Schema]]    | ''application/xml''      | 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/turtle/|Turtle]]  | ''text/turtle''          | 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/trig/|TriG]]      | ''application/trig''     | 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/n-triples/|N-Triples]]                 | ''application/n-triples'' 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/n-quads/|N-Quads]]                     | ''text/turtle''            | 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/json-ld/|JSON-LD]]                     | ''application/ld+json''    | 
 +| RDF soubor v serializaci [[https://www.w3.org/TR/rdf-syntax-grammar/|RDF/XML]]          | ''application/rdf+xml''    | 
 + 
 +===== Seznam nejčastějších chybně používaných MIME typů ===== 
 +Zde uvádíme MIME typy, se kterými se nejčastěji setkáváme u chybně poskytovatných otevřených dat. 
 + 
 +^ Formát dat                                  ^ MIME-typ                 ^ 
 +| HTML stránka                                | ''text/html''                | 
 +| Text                                        | ''text/plain''               | 
 +| Proud osmic (bajtů)                         | ''application/octet-stream''
 + 
 +===== Konfigurace webového serveru pro správnou indikaci MIME typů ===== 
 +Aby byl MIME typ správně indikován, je obvykle třeba korektně nastavit webový server ([[http://nginx.org/|nginx]][[https://httpd.apache.org/|Apache]], [[https://www.iis.net/|Microsoft IIS]], ...). 
 +Pokud jde o staticky poskytované soubory, používá se obvykle tabulka párující přípony souborů a MIME typy. 
 +Je třeba dát pozor na to, že soubory se stejnou příponou mohou odpovídat různým MIME typům.  
 +Například obecný JSON soubor má příponu ''.json'' stejně jako schéma pro CSV, MIME typy se ale liší. 
 +Je pak třeba vhodně strukturovat konfiguraci serveru, případně umístění souborů v souborovém systému serveru. 
 +Pokud se jedná o dynamicky poskytovaná data, hlavičku Content-Type nastvuje služba, která data generuje. 
 + 
 +===== MIME typy a kódování ===== 
 +Otevřená data se obvykle reprezentují v textových formátech. 
 +Znaky v těchto souborech pak z pravidla používají kódování ''UTF-8'', ale u starších XML souborů se můžeme v českém prostředí setkat s kódovaními ''ISO-8859-2'' nebo ''Windows-1250''
 +Je proto vhodné HTTP hlavičku Content-Type rozšířit o informaci indikující použité kódování, celá hlavička pak vypadá například takto: ''Content-Type: text/csv; charset=utf-8''
 +Například pro webový server ''nginx'' je třeba [[http://nginx.org/en/docs/http/ngx_http_charset_module.html|použít v konfiguraci]] ''charset utf-8;'' a ujistit se, že v hodnotě ''charset-types'' je uvedeno ''text/csv''.
  • špatná-praxe/http-content-type.1512137105.txt.gz
  • Poslední úprava: 2020/06/03 09:36
  • (upraveno mimo DokuWiki)