И о том как у сеньора немного подгорело с джуновского задания xD
История :
Есть у меня подруга, которая подалась в QA (тестирование), проходит сейчас стажировочку в одной конторе и вот дали ей задание, звучащее примерно следующим образом :
Понять как работает http заголовок
Last-Modified и If-Modified-Since, а так же продемонстрировать в рамках "картинок с учебного сайта" работу этого хедера.Задание в целом как задание, если бы не одно но. Пишет мне, что уже пол дня убила и не понимает ничерта. Теорию вычитала. Разобралась как через Fiddler "подменить" этот заголовок на нужный. Но почему-то не работает. Классика, явно просто какую-то мелочь пропустила, подумал я и взялся помочь.
И так. Как работает этот заголовок можно прочитать тут. Есть некий сервер и картинки на нём. В ответе картинки сервер отдаёт
Last-Modified в формате "Wed, 11 Sep 2019 09:41:31 GMT". Оке, гуд. Значит.... если мы в запросе к серверу добавим
If-Modified-Since со значением "Wed, 11 Sep 2019 10:41:31 GMT", т.е. просто добавив +1 минуту к Last-Modified, то сервер должен отдать нам 304-ый status code, что можно интерпретировать как "дружок, картинка не менялась, возьми-ка её из кеша своего локального". И наоборот, если отнимем минуту - сервер должен нам вернуть 200-ый статус с самой картинкой.Проверяем. Делаем запросик прям в браузере, меняем его "on-the-fly" и ..... и правда не работает. Странно. Ок, думаю - может я чего не понимаю. Открываем postman, эмулируем запрос там и ... ситуация та же. То ли лыжи не едут, то ли я пхпшник.
Копаем причину!
Даже могучий stackoverflow мне тут не помогает. Думаем. Открываем бутылочку пива. Снова думаем. Какой-то shit, ну чесн-слово. Где-то тут я уже начинаю сомневаться в своей синьористости. Подруга тоже 😂
Окей. По ответу сервера видим так же, что у нас есть заголовок
server, который сообщает нам, что на сервере отдаёт статику "nginx/1.18.0 (Ubuntu)". Ничего необычного. Nginx - это классика отдачи статики. Сысоеву привет ^^ (это создатель nginx'а. Недавно была новость, что он покинул проект :( ).Смотрим на версию nginx'а. 1.18. Гуглим и оказывается, что релиз этой версии был в .... 2012. Что в целом меня тоже не сильно удивляет, конечно, но ... десять лет назад. Смотрим описание ченджлога, а там как раз в новых версиях что-то написано про импрувмент
If-Modified-Since! Нет, ну не может же это быть таким драматическим совпадением, верно? Идём на сайт вики, где установлена последняя версия, проверяем на картинке с их лого - Нет, ну [censored] - всё работает как и ожидается. По пути нагугливаем сайт https://last-modified.com/ru/if-modified-since.html, единственной задачей которого проверить - работает ли
If-Modified-Since на сервере. И что мы видим ...Результат: проваленоНет, ну это прекрасно. Т.е. джуну дали невыполнимое задание, получается. Красиво!
Сайт отдал время последней модификации, но не отреагировал на If-Modified-Since. Запрошенное время: Wed, 11 Sep 2019 09:42:11 GMT.
Выводы :
1) Если у вас так себе "курсы" - имейте ввиду, что вам просто в теории могут дать кривое задание. Поэтому очень важно учиться у проверенных ребят, иначе и без того сложные задания могут вообще не поддаться. По идее, это супер-редкость, но как видите... шанс есть :)
2) Не стесняйтесь дёргать ваших кураторов, если что-то не получается. Ну или ваших друзей-синьоров. Ну или - хотя бы ребят в айтишных специализированных чатах.
3) Магии нигде в айти нет, всё можно "раскопать". Ну.. кроме нейронок 😂
ps. Забавным открытием было, что nginx настолько умный, что просто поменять, к примеру, месяц - не меняя день недели - не катит. Он валидирует дату не только по формату, но и на логику самой даты. Никаких ошибок в ответе вы конечно же не увидите. Ну и "11 Sep" заменив на "9 Sep", допустим - тоже не катит. Нужно писать "09". кек
Удачи всем в обучении/познании и да прибудет с вами 🍺
#авторское