Експорт SSRS не працює через VPN-портал без клієнта: що відрізняється
Сторінка звіту доводить візуалізацію, а не експорт. Простежте запит експорту через портал, порівняйте заголовки й тіло, потім вузько обмежте будь-який виняток.
Звіт відкривається в браузері, параметри візуалізуються, а кнопка експорту видає помилку, порожнє завантаження або файл, який таблиця відмовляється відкривати. Така комбінація має стандартну форму. Робоча сторінка звіту перевірила візуалізацію й автентифікацію і більше нічого. Експорт — це окремий запит із власною відповіддю, і через портал без клієнта він проходить ще й через шар перезапису, який ніколи не проєктувався для завантаження файлів.
Два шляхи, одна робоча сторінка
Візуалізація й експорт — різні операції, навіть коли починаються з однієї кнопки. Сервер звітів візуалізує сторінку для браузера й готує експорт через інше розширення виводу з власним типом вмісту й власною поведінкою при помилці, як описує документація з експорту. Портал, що бездоганно пропускає перше, усе одно може зіпсувати друге, бо друге — це відповідь, якої портал не очікував побачити. Обидва ділять сеанс і адресу, і майже нічого більше.
Розглядайте робочу сторінку лише як доказ автентифікації й доступності. Вона доводить, що обліковий запис може дістатися сервера звітів і що портал пересилає HTML. Вона нічого не каже про відповіді з файлами, заголовки розташування вмісту або перенаправлення, які закінчуються завантаженням, а не документом.
Це вся причина порівнювати шлях експорту окремо, а не перевіряти знову сторінку, що вже працює. Два запити, які ділять сеанс, залишаються двома запитами.
Три умови, що визначають, де ламається експорт
Три питання швидко визначають місце збою, і кожна відповідь указує на іншого власника.
По-перше, чи той самий звіт, обліковий запис і формат правильно експортуються з внутрішньої мережі? Якщо так, сервер звітів і його візуалізатор у порядку, а різниця в шляху доступу. По-друге, чи несе невдала відповідь тип вмісту файлу або HTML-сторінку з розширенням файлу? Це відокремлює помилку візуалізатора від підміни порталом. По-третє, чи переписує портал URL запиту або видаляє заголовки з відповіді? Переписаний URL може опинитися на зовсім іншій кінцевій точці.
Дайте відповідь на всі три до зміни будь-якого параметра, бо кожен має власні ліки. Помилка візуалізатора належить серверу звітів, підмінене тіло належить порталу, а видалений заголовок — це питання політики, а не помилка.
Запишіть відповіді. Звернення до підтримки, побудоване з цих трьох рядків, варте десяти скриншотів.
Читайте відповідь експорту, а не код стану
Успішний статус HTTP доводить лише те, що щось відповіло на запит. Перевіряйте тіло й заголовки разом, бо цікавий збій — це успішна відповідь із неправильним вмістом.
curl -sS -D export.headers -o export.bin --location "https://portal.example.com/reports/export?format=xlsx"
file export.bin
head -c 300 export.bin
Дамп заголовків показує тип вмісту й будь-яке розташування вмісту, яке повернув портал. Команда file визначає, чим тіло насправді є, а текстовий файл там, де очікувалася таблиця, — це класична підмінена сторінка входу. Команда head показує достатньо, щоб розпізнати HTML, не виливаючи весь звіт у термінал.
Видаліть сеансові cookie й токени, перш ніж ділитися будь-якою частиною цього. Запис робочого експорту — корисний доказ, а запис сеансу, що належить комусь іншому, — це інцидент.
Обмежте виняток застосунком, а не обліковим записом
Якщо портал переписує або блокує відповідь, спокусливе виправлення — звільнити весь сайт або зробити звіт анонімним. Обидва варіанти виправляють завантаження й прибирають причину існування порталу. Вузький виняток називає один шлях застосунку, один тип вмісту й один напрямок, і він залишається доступним для перегляду тому, хто володіє політикою.
Використовуйте ту версію шлюзу, яку ви насправді запускаєте, та його задокументовані налаштування застосунку. Параметр, який постачальник колись описав як такий, що залишає трафік незмінним, не є загальною інструкцією, а копіювання його зі старої теми форуму — це шлях, яким тимчасовий виняток стає постійною архітектурою.
Якщо виняток не можна обмежити так вузько, експорт, імовірно, належить внутрішньому шляху з іншим методом доступу, а не за порталом. Звільнення всього сайту — рішення власника порталу, а не обхідний шлях для одного звіту.
Приймайте експорт, а не діалог збереження
Остання перевірка — сам файл: він відкривається, містить очікувані стовпці, а його підсумки збігаються зі звітом, який затвердив користувач.
Поява діалогу збереження не є успіхом, і файл, що відкривається з попередженням про відновлення, теж не успіх. Порівняйте кількість рядків і одне відоме значення зі звітом на екрані, бо обрізаний експорт проходить будь-який тест, що дивиться лише на розмір файлу. Потім експортуйте вдруге, бо шар кешу, який одного разу віддав неправильне тіло, наступного разу може віддати правильне.
Приймайте робочий процес, який був потрібен користувачеві, і нічого менше. Завантаження, що відкривається в неправильному застосунку, усе ще є невдалим експортом.