Вернитесь к вашему изначальному скрипту, уберите $posts = iconv('utf-8', 'windows-1251', $posts); и делайте такой же iconv но над каждой нужной строкой внутри цикла.
Сделайте var_dump($_SERVER), многое должно проясниться.
Если у вас https://site.ru и при этом SERVER_PORT = 80, то с большой вероятностью у вас есть nginx или аналогичный сервер.
Однако на виртуальном хостинге https... не часто бывает.
leonkor: Вы можете сгенерировать ключ хоть где (на сервере, дома, где-то еще), при выдаче SSL сертификата некоторые компании предлагают прямо у них сгенерировать ключ. Этот ключ не имеет ничего общего с ключем доступа на сервер.
Cache-Control:max-age=0,19803810119629 - некорректный заголовок, там не должно быть таких дробей. Тут должно быть что-то типа "private, max-age=0, no-cache". Expires вроде вполне нормальные, но для гарантии я бы Expires убавил на годик-другой (хотя бы на пару дней).
Или хотя бы полные отправляемые и принимаемые заголовки когда скрипт загружается и когда берется из кеша.
Как вариант - отправьте туда POST запрос, вряд ли браузер рискнет закешировать POST.