Пераклад на беларускую мову Patricia Clausnitzer
Нядаўна я знайшоў сябе праверка таго, як браўзары сніфяць для RSS 1.0 стужкі, якія падаюцца з няправільным тыпам MIME. (Так, маё жыццё поўная смачныя іроніяй.) Я думаў, я б падзяліцца сваімі высновамі дагэтуль.
Firefox
апетыту Firefox нюхаюць алгарытм знаходзіцца ў nsFeedSniffer.cpp. Як вы можаце бачыць, пачынальна з лініі 353, ён займае першае 512 байт на гэтай старонцы, шукае каранёвы тэг завецца rss (на RSS 2.0), atom (для Atom 0,3 і 1,0), ці rdf:RDF (для RSS 1.0 ). RSS 1.0 маркер насамрэч агульны маркер RDF, так што ж тады некаторыя дадатковыя праверкі на дзве патрэбныя прасторы імёнаў у RSS 1,0 корм, http://www.w3.org/1999/02/22-rdf-syntax-ns# і http://purl.org/rss/1.0/. Гэта праверка вельмі простая, яна літаральна праверкі на наяўнасць абодвух радкоў, не клапоцячыся, ці з'яўляюцца яны значэнне xmlns атрыбут (ці нават які-небудзь атрыбут на ўсіх).
Firefox мае дадатковую функцыю, якая спатыкнуўся майго тэставання, пакуль я не зразумеў. IE і Safari абодва маюць рэжым, у якім яны першым чынам сказаць: "Я выявіў гэту старонку ў якасці корму і паспрабаваў разабраць яго, але мне не атрымалася, так што зараз я адмовіцца, а вось паведамленне пра памылку павінна паказвацца, чаму я адмовіўся". Firefox не падабаецца гэты рэжым. Наколькі я магу судзіць, калі ён вырашыць, што рэсурс корму, але затым не разабраць рэсурсаў у якасці корму, то reparses рэсурсаў з падачай апрацоўкі інвалідаў. Так не-правільна сфармаваны карма служыць application/rss+xml будзе фактычна выклікаць "Вы жадаеце, каб запампаваць гэты файл, дыялог, таму што Firefox паспрабаваў разабраць яго ў якасці корму, не атрымаўся, тое перагенеравацца як некаторыя-выпадковых медыя-тыпу, то, я-не-ручкі. Без добра сфармаванай карма служыць text/html сапраўды зрабіць, як HTML, але толькі пасля таго Firefox моўчкі спрабуе (і не), каб разабраць яго ў якасці корму.
Там няма нічога дрэннага ў гэтым падыходзе, сапраўды, здаецца, значна больш канчатковага карыстача дружалюбны, чым вырвала паведамленні незразумела памылкі. Я проста адзначыць гэта, паколькі спатыкнуўся мяне падчас тэставання.
Internet Explorer
Explorer апетыту Інтэрнэт нюхаюць алгарытм дакументальна RSS каманды Windows. О RSS 1.0, у ёй гаворыцца:
IE7 выяўляе RSS 1.0 канал з дапамогай тыпаў змесціва,
application/xmlціtext/xml. ... Дакумент правяраецца на наяўнасць радка<rdf:RDF,http://www.w3.org/1999/02/22-rdf-syntax-ns#іhttp://purl.org/rss/1.0/. IE7 выяўляе, што канал, калі ўсе тры радкі знаходзяцца ў межах першых 512 байт дакумента. ... IE7 падтрымлівае і іншыя агульныяContent-TypeS, праверыўшы дакумент для пэўных Atom і RSS радкоў.
Зараз, калі я зразумеў алгарытм IE, я павінен прызнаць, што гэта дакументацыя з'яўляецца 100% дакладным. Тым не менш, гэта не кажа ўсёй праўды. Вось што адбываецца ў рэчаіснасці. Калі Content-Type з'яўляецца
application/xmltext/xmlapplication/octet-streamtext/plaintext/html- гэта пусты радок ці
- наогул адсутнічае
... Тады IE выкліча яго канал прынюхваючыся. Пасля IE запускае яго канал прынюхваючыся, ён ніколі не зменіць сваю пазіцыю (у адрозненне ад Firefox). Калі карміць разбору не атрымоўваецца, IE будзе кінуць паведамленне пра памылку са скаргамі на кормы памылкі ў кодзе ці непадтрымоўваны фармат канала. Наяўнасць ці адсутнасць charset параметру Content-Type загалоўка зрабіў абсалютна ніякай розніцы ні ў адным з выпадкаў я тэставаў.
І як менавіта IE выявіць RSS 1,0 корм, калі ён вырашае сніфяць? Дакументацыі на MSDN літаральна так: "Гэты дакумент правяраецца на наяўнасць радка <rdf:RDF, http://www.w3.org/1999/02/22-rdf-syntax-ns# і http://purl.org/rss/1.0/. IE7 выяўляе, што канал, калі ўсе тры радкі знаходзяцца ў межах першых 512 байт дакумента ". У спалучэнні з нашымі ведамі якіх Content-Type з IE лічыць "агульны", мы можам скласці, што на наступнай старонцы, служыў text/html, будуць разглядацца ў якасці корму ў IE:
<!-- <rdf:RDF -->
<!-- http://www.w3.org/1999/02/22-rdf-syntax-ns# -->
<!-- http://purl.org/rss/1.0/ -->
<script>alert('Hi!');</script>Навошта турбавацца?
Я працую з Адама Барта і Ян Хиксон абнавіць праект-Abarth-мім-сніфяць-01 (утрыманне нюхаюць алгарытм высылаецца HTML5), каб пасніфяць RSS каналы 1,0 служыў text/html. Малаверагодна, што мы будзем прымаць алгарытм IE, бо ён здаецца залішне паталагічным. Я прапаную наступныя змены, якія прынясе ўтрыманне нюхаюць спецыфікацыі ў адпаведнасці з алгарытмам нюхаюць у Firefox:
У Feed ці HTML распранула выказаць у наступнай крокаў паміж крокам 10 і 11 крок:
10a. Ініцыялізацыя /RDF flag/ у 0.
10b. Ініцыялізацыя /RSS flag/ у 0.
10c. Калі кропкі с пазіцыяй pos у pos+23 роўныя у 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x70, 0x75, 0x72, 0x6C, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x72, 0x73, 0x73, 0x2F, 0x31, 0x2E, 0x30, 0x2F суадносна (ASCII for "http://purl.org/rss/1.0/"), тады:
- Павял. pos да 23.
- Вуснаў /RSS flag/ у 1.
10d.Калі кропкі з пазіцыяй pos у pos+42 у s роўыня 0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E, 0x77, 0x33, 0x2E, 0x6F, 0x72, 0x67, 0x2F, 0x31, 0x39, 0x39, 0x39, 0x2F, 0x30, 0x32, 0x2F, 0x32, 0x32, 0x2D, 0x72, 0x64, 0x66, 0x2D, 0x73, 0x79, 0x6E, 0x74, 0x61, 0x78, 0x2D, 0x6E, 0x73, 0x23 суадносна (ASCII для "http://www.w3.org/1999/02/22-rdf-syntax-ns #"), то:
- Павял. pos да 42.
- Вуснаў. /RDF flag/ у 1.
10e. Павелічэнне pos да 1.
10f. Калі /RDF flag/ роўна 1, і /RSS flag/ роўна 1, тады /sniffed type/ роўны "application/rss+xml". Перапыніце гэтыя крокі.
10g. Калі пазіцыя кропкі пасля канчатка са струменем s, а затым працягнуць у крокам 11 гэтага алгарытму.
10h. Зрабіце крок назад 10c у алгарытме.
Дадатковая літаратура
Вы можаце бачыць вынікі сваіх даследаванняў на сённяшні дзень і праверыць каналы для сябе. Таму што мае вынікі даследавання звычайнага тэксту з убудаваным HTML тэгаў, я дадаў 512 байт вядучыя прабелы на старонку, каб сарваць звычайнага тэксту ці HTML-змесціва браўзара прынюхваючыся. Мммм - смачны, смачны іроніі.

