Mam pytanie dotyczące sposobu odpowiedzi. Zauważyłem, że wiele kodów HTML wydaje się działać w podglądzie odpowiedzi, ale nie pojawia się ostateczna odpowiedź. Dlaczego są zablokowane?

Mam pytanie dotyczące sposobu odpowiedzi. Zauważyłem, że wiele kodów HTML wydaje się działać w podglądzie odpowiedzi, ale nie pojawia się ostateczna odpowiedź. Dlaczego są zablokowane?
Anonim

Krótka odpowiedź brzmi: używamy dwóch różnych bibliotek Markdown do renderowania podglądu i ostatecznej odpowiedzi. Te dwie różne biblioteki traktują HTML inaczej.

Nasze odpowiedzi są stylizowane i formatowane przy użyciu języka znaczników zwanego „Markdown”. Markdown konwertuje predefiniowane znaczniki na HTML dla linków, obrazów, nagłówków, kursywy, podkreślenia itp.

Bez zbytniej analizy technicznej nasz podgląd odpowiedzi jest tworzony w przeglądarce za pomocą biblioteki JavaScript. Robimy to ze względu na szybkość.

Po odświeżeniu strony odpowiedź jest już konwertowana na HTML za pomocą naszej biblioteki Python Markdown. Robimy to, ponieważ chcemy, aby odpowiedź wyglądała świetnie, gdy tylko dotrzesz do strony. Jeśli zdecydowalibyśmy się po prostu wyprowadzić surową odpowiedź, a następnie przekonwertować ją za pomocą naszej biblioteki Javascript, zauważylibyśmy najpierw „brzydką” surową odpowiedź, a następnie skok do ładnie sformatowanej wersji. To nie jest takie złe, ale problem polega na tym, że Google i inne boty indeksujące naszą witrynę do wyszukiwania nie używają Javascript. Te boty zawsze widziały surową, brzydką odpowiedź, która mogła zaszkodzić naszemu rankingowi wyszukiwania.

Dlaczego te dwie biblioteki traktują kody HTML w inny sposób? Biblioteka Pythona odpowiedzialna za ostateczną odpowiedź „wymyka się” HTML, co oznacza, że pobiera te kody HTML i zmienia je na nieszkodliwy tekst. Mówię nieszkodliwe, ponieważ można sobie wyobrazić, że użytkownicy mogą wprowadzać HTML na naszej stronie, aby całkowicie zniszczyć układ strony. Biblioteka Javascript odpowiedzialna za podgląd NIE unika HTML, co technicznie jest błędem.

W przyszłości będziemy musieli usunąć zdolność biblioteki Javascript do podglądu kodów HTML ze względów bezpieczeństwa. Przejdziemy również do używania pojedynczej biblioteki do renderowania wszystkich naszych tekstów Markdown.