fix(api): CORS открывает фронту Content-Disposition (#173, AURORA-1532) #174

Merged
aep merged 1 commits from feat/173-cors-expose-content-disposition into main 2026-10-23 16:19:05 +03:00
Owner

Closes #173. Jira: AURORA-1532.

Что

cors_options добавляет expose_headers=["Content-Disposition"] и при DEBUG=true (*), и для CORS_ORIGINS. Без этого браузер не отдаёт JS имя файла с другого источника, и apiBlob сохраняет экспорт под запасным именем.

Откуда

Прогон чек-листа qa-guide §8.6 (W29–W35) на локальном стенде из main 23.10.2026: всё зелёное, кроме W35 — экспорт сводной ОСВ сохранялся как Сводная_ОСВ_Русский_Бисквит_2024_Q3.xlsx, хотя сервер отдаёт svod-osv_Русский Бисквит_2024-Q3_v1.xlsx. Касается всех бинарных ответов (шахматка, таблица ВГО, CSV чек-листа). В контуре SPA и API на одном источнике — там заголовок читался и раньше.

Тесты

  • test_cors_exposes_content_disposition (DEBUG и CORS_ORIGINS), test_cors_options_rules дополнен.
  • README: строка CORS_ORIGINS.

make check-full — exit 0

  • ruff: All checks passed; mypy: no issues in 216 source files
  • test: 1846 passed, 10 skipped
  • test-integration: 952 passed, 172 skipped
  • e2e: 1 skipped (без профиля services)
  • web-check: biome 6 warnings (прежние, файлы PR их не касаются), tsc, build — ок

Документация: arm-ka-docs PR по #162 (qa-guide §8.6–8.7, frontend-api-guide §7/§10).

Rulings I made

  • Исправили CORS в ядре, а не стали менять W35 под запасное имя: чек-лист ждёт имя с сервера, а фикс в одну строку.

🤖 Generated with Claude Code

Closes #173. Jira: AURORA-1532. ## Что `cors_options` добавляет `expose_headers=["Content-Disposition"]` и при `DEBUG=true` (`*`), и для `CORS_ORIGINS`. Без этого браузер не отдаёт JS имя файла с другого источника, и `apiBlob` сохраняет экспорт под запасным именем. ## Откуда Прогон чек-листа qa-guide §8.6 (W29–W35) на локальном стенде из main 23.10.2026: всё зелёное, кроме W35 — экспорт сводной ОСВ сохранялся как `Сводная_ОСВ_Русский_Бисквит_2024_Q3.xlsx`, хотя сервер отдаёт `svod-osv_Русский Бисквит_2024-Q3_v1.xlsx`. Касается всех бинарных ответов (шахматка, таблица ВГО, CSV чек-листа). В контуре SPA и API на одном источнике — там заголовок читался и раньше. ## Тесты - `test_cors_exposes_content_disposition` (DEBUG и `CORS_ORIGINS`), `test_cors_options_rules` дополнен. - README: строка `CORS_ORIGINS`. ## make check-full — exit 0 - ruff: All checks passed; mypy: no issues in 216 source files - test: 1846 passed, 10 skipped - test-integration: 952 passed, 172 skipped - e2e: 1 skipped (без профиля services) - web-check: biome 6 warnings (прежние, файлы PR их не касаются), tsc, build — ок Документация: arm-ka-docs PR по #162 (qa-guide §8.6–8.7, frontend-api-guide §7/§10). ## Rulings I made - Исправили CORS в ядре, а не стали менять W35 под запасное имя: чек-лист ждёт имя с сервера, а фикс в одну строку. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-23 15:54:41 +03:00
При фронте на другом источнике (web :3000, api :8000) браузер не отдавал JS
заголовок Content-Disposition, и экспорт сводной ОСВ, шахматки, таблицы ВГО
и CSV чек-листа сохранялся под запасным именем (qa-guide W35).
expose_headers=["Content-Disposition"] в обоих режимах cors_options.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit f2c70935b2 into main 2026-10-23 16:19:05 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#174
No description provided.