Rozdíly

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


Předchozí verze
Následující verze
špatná-praxe:http-content-type [2017/12/01 15:54] – [Chyná hlavička HTTP Content-Type] Jakub Klímek
Řádek 1: Řádek 1:
 +====== Chyná hlavička HTTP Content-Type ======
 +Otevřená data se vystavují na webu a jsou přístupná typicky přes protokol HTTP(S).
 +Ten má svá pravidla, která je pro správné fungování webu nutné dodržovat.
 +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 v této hlavičce je tzv. Media Type, nebo 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 přenášených dat.
 +Hodnota v této hlavičce by tedy měla odpovídat jak přenášenému obsahu, tak také hodnotě uvedené v metadatech distribuce datové sady.
 +Toto se týká každého zdroje na webu, v kontextu otevřených dat tedy zejména souborů s daty, datových schémat, podmínek užití a 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.
  
 +^ Formát dat                                                         ^ MIME-typ                 ^
 +| CSV soubor                                                         | ''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.txt
  • Poslední úprava: 2020/06/03 09:37
  • autor: 127.0.0.1