Задать вопрос
Ответы пользователя по тегу Веб-разработка
  • Есть ли реальная необходимость использовать Git LFS?

    @Mercury13
    Программист на «си с крестами» и не только
    У Git-LFS только два выигрыша.
    1. Перескок от ветки к ветке происходит быстрее.
    2. Многие хостинги имеют отдельную политику для крупных файлов, что позволяет как-то жить, не упираясь в пределы дискового места.
    Ответ написан
    Комментировать
  • Где лучше хранить массив объектов? json или бд?

    @Mercury13
    Программист на «си с крестами» и не только
    Хранение лучше в БД. Любой, хоть SqLite, хоть MyISAM, нет у вас каких-то причин искать СамуюМоднуюСУБД®.

    Как промежуточный механизм передачи данных можно и JSON, если так хотите. Всё зависит от ваших навыков веб-разработчика. Поскольку мои веб-знания устарели лет этак на пятнадцать, я бы сначала сделал чистый PHP + не-AJAX, а потом думал бы.
    Ответ написан
    Комментировать
  • Зачем делают разные сайты для мобильной и десктопной версии веб-приложений?

    @Mercury13
    Программист на «си с крестами» и не только
    Сайт может быть:
    • преимущественно настольный (Посмотре.ли);
    • преимущественно мобильный (Эгея. Или вот знакомая пишет внутреннюю систему учёта отпускных — всё сделано, чтобы работало с мобилы);
    • адаптивный (Розетка — простите, я с Украины. Ну и Хабр Q&A);
    • с сильно разными шкурками под настольный и мобильный (Википедия, YouTube)

    Какие факторы на это влияют:
    • Умение веб-программиста — что он умеет, то и пишет.
    • Используемый инструментарий — скажем, у нас есть древний сайт, надо переписать под мобилу.
    • Соотношение «настольный/мобильный» — например, заказ пиццы обязательно делать преимущественно мобильным или адаптивным.
    • Контент — если много картинок, приходится думать. И наоборот, простой блог без проблем можно сделать преимущественно мобильным, что и сделал Бирман в своей Эгее.
    • Особый настольный инструментарий — например, вики смотрят и с мобилы, но редактирование с мобилы — крайне редкий сценарий и обычно ограничивается редактурой. YouTube с мобилы много глазеют, но залить с мобилы — дело значительно более редкое. И уж совсем редкое — управлять видеоблогом с мобилы.

    Кодовая база общая, разные только шкурки.
    Ответ написан
    Комментировать
  • Почему элемент svg выглядит по другому на ios и других браузерах, в отличие от Chrome и android?

    @Mercury13
    Программист на «си с крестами» и не только
    Если хотите рендеринг шрифтов 1:1 — конвертируйте их в кривые!
    Сколько раз твердили миру…
    Ответ написан
    Комментировать
  • Программист создает сайт, на котором нельзя копировать инфу?

    @Mercury13
    Программист на «си с крестами» и не только
    Помогает против пользователей. Не помогает против ботов. Зачем вообще такой сайт?
    Ответ написан
    Комментировать
  • Как сделать двойное условие в SQL запросе?

    @Mercury13
    Программист на «си с крестами» и не только
    AND всегда приоритетнее, чем OR. Надо так.
    WHERE (`categories_id` = '17' OR `categories_id_2` = '17' ...)
      AND (`categories_id` = '1' OR `categories_id_2` = '1' ...)

    Может, как говорит, oleg_ods, сработает связь 1:∞, может, и не сработает — но быстрое исправление запроса такое.
    Ответ написан
    1 комментарий
  • Как отправить POST запрос с помощью C#?

    @Mercury13
    Программист на «си с крестами» и не только
    На самого себя.

    Если, например, страница example.com/test.php, то эта страница и будет action.
    Ответ написан
  • Чем отличается NAT от обычного "роутинга"?

    @Mercury13
    Программист на «си с крестами» и не только
    Это две совершенно разные технологии. Они идут рука об руку, но никаких проблем использовать их порознь.
    DHCP без NAT — любая домосеть с «белыми» адресами, которая автоматически раздаёт их.
    NAT без DHCP — никаких проблем его сделать на обычном домашнем роутере.

    Как действует NAT. Берём и корректируем в исходящем пакете какие-нибудь параметры вроде исходящего порта (чтобы узнать, чей пакет). Заодно меняем исходящий адрес на внешний адрес сети. Когда приходит ответ, восстанавливаем исходного абонента, меняем входящий адрес на адрес этого абонента и ретранслируем его во внутреннюю сеть.

    Задача простого роутинга (который не NAT) — просто передать пакет дальше по цепочке, уменьшив TTL и определив по таблице маршрутизации, на какое из соединений надо его передавать.
    Ответ написан
  • Какие процессы происходят при обновлении страницы?

    @Mercury13
    Программист на «си с крестами» и не только
    Blink (именно он) странно ведёт себя, если margin/padding span’а задан в процентах. Видимо, там есть какой-то внутренний кэш шрифтов, и он для определения нужного размера span’а берёт устаревшие цифры.
    Попробуйте помасштабировать страницу, и увидите, как пляшут надписи.
    Вообще никто не говорит, как должен действовать margin в % для span’а. Но метод центровки откровенно странный и представляет собой ручную подгонку под желаемое (причём очень грубую). Я бы сделал достаточно большой блок и в нём бы отцентрировал иконку и надпись. Если какой-то рендерер не уместит надпись в одну строку — ну пускай…

    UPD. Уточняю: Blink так ведёт себя, когда в блоке есть замкнутый круг: из-за float’а его ширина зависит от вёрстки текста в нём; из-за процентных отступов вёрстка текста зависит от размера блока.
    Ответ написан
    4 комментария
  • Зачем во избежание XSS нужно указывать на каждой странице кодировку, если злоумышленник все равно может изменить ее?

    @Mercury13
    Программист на «си с крестами» и не только
    Совет несколько устаревший, и вот он для чего.
    Есть откровенно странная кодировка под названием UTF-7, которую по-чёрному использовали для XSS. Например:
    +ADw-script+AD4-alert(+ACc-utf-7!+ACc-)+ADw-+AC8-script+AD4-


    Задачей хакера было заставить браузер верить, что текст в UTF-7, прежде чем в HTML’е придёт маркер кодировки.
    IE11 поддерживал UTF-7, поддерживает ли Edge — не в курсе. Остальные браузеры отказались лет десять назад.

    Подробнее:
    https://nedbatchelder.com/blog/200704/xss_with_utf...

    Ну и будет просто некрасиво, если пользовательские данные появляются до маркера кодировки и браузер эту самую кодировку неверно опознал. Но хоть XSS не будет ни в одной кодировке, основанной на ASCII.
    Ответ написан
    3 комментария
  • Как защититься от мультизапросов (Charles)?

    @Mercury13
    Программист на «си с крестами» и не только
    Транзакции и блокировка строк. Точка.
    https://ru.wikipedia.org/wiki/Уровень_изолированно...
    https://dev.mysql.com/doc/refman/8.0/en/innodb-tra...

    Вам вроде нужен самый сильный уровень изоляции транзакций, SERIALIZABLE.

    Более сложный, но более высокопроизводительный способ — SELECT FOR UPDATE.
    https://dev.mysql.com/doc/refman/8.0/en/innodb-loc...
    Тут уровень изолированности транзакций не важен, поскольку вы сами выбираете, какую строку как изолировать.
    Ответ написан
    Комментировать
  • Что такое безсерверная обработка данных?

    @Mercury13
    Программист на «си с крестами» и не только
    Название странное. Это когда облачная платформа выделяет не сервер (виртуальную машину, контейнер), а какую-то функцию, и на каких серверах она работает — не важно.
    https://en.wikipedia.org/wiki/Serverless_computing
    Ответ написан
    Комментировать
  • Как можно заразиться вирусом просто посещая сайты?

    @Mercury13
    Программист на «си с крестами» и не только
    Сейчас это крайне тяжело. Заражение возможно через четыре канала:
    • Уязвимости конкретного браузера. Кстати, это одна из причин, почему каждая вкладка Хрома — отдельный (и низкопривилегированный) процесс: если процесс хакнут, меньше шансов, что дойдёт до овладения компьютером.
    UPD. Это такой набор данных (например, специально созданный GIF/JPEG/HTML), который, например, пробивает в браузере буфер.
    • Уязвимости плагинов. Уязвимости в Java — это настолько обсосанная вещь, что и говорить не буду; вроде от Java в вебе отказались даже сами Oracle. Flash каждую неделю обновляют. Уязвимости плагинов плохи двумя вещами: 1) Пускай сейчас в мире один браузер — есть ещё два десятка прихлебателей и три браузера «труба пониже, дым пожиже». А Флэш один на всех; 2) Старое плагинное API, оставленное только Флэшу,— большая дыра в безопасности.
    • Уязвимости прочего софта. Казалось бы, качаешь PDF — а это эксплойт для Adobe Reader.
    • «Троянские кони» — но это уже надо своими руками запустить EXE.
    Кстати, в нашей пиратской культуре считается, что UAC надо побыстрее отключить, и во всех «левых» дистрибутивах он выключен. По-моему, это в корне неверно.
    Ответ написан
    8 комментариев
  • Как безопасно загрузить SVG на сайт?

    @Mercury13
    Программист на «си с крестами» и не только
    К сожалению, в этом плане мы отданы на милость производителю браузера — как, впрочем, и в PNG, и в JPG. С одной стороны, они стараются избавиться от ошибок — например, как-то были скрипты в SVG (вроде в классической Опере). Исправили.
    С другой — векторная графика на порядок сложнее точечной, и всё не предусмотришь.

    Я бы поделил это на три части.
    1. Типичные для XML риски.
    • Entity-бомбы.
    • Проблемы с DTD, особенно отсылки на локальные файлы и файлы-устройства.
    • Сильно вложенные тэги, призванные пробить врагу стек. С этим надо быть предельно осторожным, чтобы не пробить стек себе :)

    2. Известные эксплойты, связанные с SVG.
    • Скрипты (и кто их вообще исполняет сейчас в SVG — но интернет говорит, что немало таких зловредов).
    UPD. Исполняют, но при определённых условиях, и тэг IMG или фон через CSS теоретически безопасны.

    3. SVG, которые не могут работать.
    • Ссылка на внешний растровый файл.
    Ответ написан
    Комментировать
  • Что добавить к URL Youtube чтоб при открытии сразу появлялись субтитры с русским автоматическим переводом?

    @Mercury13
    Программист на «си с крестами» и не только
    ?language=russian недавно исчезло и никто не знает, что дальше. Вероятно, теперь личные настройки пользователя перебивают то, что поставил автор.
    Ссылка на время — #t=1h23m34s.
    Ответ написан
    Комментировать
  • Домен и доменное имя. В чем разница?

    @Mercury13
    Программист на «си с крестами» и не только
    example.com — это домен = доменное имя
    https://example.com — это уже URL, состоящий из…
    • схемы URL’а (протокола, типа ресурса) https:
    • и специфичных для протокола HTTP(s) вещей, к коим относятся
      • знак домена //
      • домен example.com

    Когда мы пишем в браузере example.com/path, система понимает, что надо добавить схему и знак домена, но упаси бог такое писать в HTML — получится что-то типа http://local.example.net/example.com/path.
    Ответ написан
    Комментировать
  • Браузер игнорирует keep-alive?

    @Mercury13
    Программист на «си с крестами» и не только
    Это другая штука, имеющая опосредованное отношение к keep-alive. Это загрузка информации в несколько потоков.

    Почему шесть соединений, а не пять — другой вопрос. Я бы предположил вот что. Браузер разобрал index.html и увидел там картинку. Создаём новое HTTP-соединение (нешифрованное) — два пинга спустя поехали данные. Задействуем имеющееся — один пинг спустя. С небольшим пингом браузер просто подумал, что быстрее будет вот так. А может, браузер просто туп и если мы укладываемся в количество соединений с одним сервером — создаём новые, да и всё.

    А вот то, что все картинки в разных потоках — это верно. Если считать скорость сети «бесконечной», для каждой из них информация пойдёт с запозданием в два пинга. Работай мы в один поток — первая пришла бы с запозданием в 2 пинга, вторая в 3 пинга, третья в 4 пинга… А вот протоколы SPDY и HTTP/2 позволяют сказать: «Дай мне картинки А, Б и В»,— и они все, ОДНИМ СОЕДИНЕНИЕМ, придут с запозданием в два пинга.

    Другими словами:
    HTTP (все метки времени — когда они были посланы с клиента/приняты клиентом):
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запрос 1 (+1 пинг)
    С: Ответ 1 (+2 пинга)
    К: Запрос 2 (+2 пинга)
    С: Ответ 2 (+3 пинга)

    HTTP2:
    К: SYN: (+0 пингов)
    С: SYN+ACK (+1 пинг)
    К: ACK (+1 пинг)
    К: Запросы 1, 2 (+1 пинг)
    С: Ответы 1, 2 (+2 пинга)

    На реальных «не очень быстрых» соединениях играют роль не только пинги, но и скорость передачи. Тогда картинки начнут появляться не по одной, а по восемь (или сколько там соединений) — это тоже может повлиять на впечатление от браузера. К тому же если случился затор на шлюзе локальной сети — тогда, если одно соединение забарахлит, другие что-то привезут. А если сеть не очень хорошо сконфигурирована — это ещё и ввосьмеро увеличит скорость передачи (реально в начале 2000-х качал в универе 10-мегабайтный драйвер за перемену в 100 потоков).

    Я бы посоветовал сделать штук двадцать картинок — и тогда начнётся повторное использование имеющихся соединений.
    Ответ написан
    Комментировать
  • Почему с мобильного перевернутые изображения?

    @Mercury13
    Программист на «си с крестами» и не только
    Покажите конкретную картинку, я не нашёл.
    Но в целом причина вот в чём. Часто камеры для простоты сохраняют картинку в стандартной ориентации, а реальный поворот аппарата записывают в EXIF. Одни браузеры эти EXIF’ы читают, другие нет.
    Вообще сайт странный и в роли уменьшенных картинок — полноразмерные 1600×1200.
    Ответ написан
    Комментировать
  • Как называется процесс чтения кода браузером?

    @Mercury13
    Программист на «си с крестами» и не только
    Parsing, разбор.
    Ответ написан
    Комментировать
  • Нужно ли солить хеш длинного случайного сессионного ключа в БД?

    @Mercury13
    Программист на «си с крестами» и не только
    Для чего вообще солят хэши? Против сливов БД: если хэши ушли, по ним сложно восстановить пароли.
    • Если при подозрении на слив мы можем перегенерировать ключи или объявить их просроченными;
    • Если ключи держатся где угодно, только не в БД;
    • Если ключи настолько длинны и случайны, что сложновато будет обратить алгоритм объединёнными хакерскими силами
    — то зачем?

    Впрочем, не забывайте, что хэшируя, вы автоматически снижаете криптостойкость вашего алгоритма до длины хэша. А может, проще изначально делать ключи такой длины?
    Ответ написан
    Комментировать