---
name: nspd_direct_http_2026-06-18
description: НСПД 2026-06-18 — search API и 22/25 WMS-слоёв ЗОУИТ отвечают прямым HTTP без WAF; fast-path для land_constraints
metadata: 
  node_type: memory
  type: project
  originSessionId: d0c6c5aa-4d05-42e2-a1f9-034482b88603
---

Замер с мини 2026-06-18 (меняет диагноз [[zbrcheck_vps_access]] от 2026-06-07 «НСПД только Playwright 4-80с»):

- **ПКК умер** — `pkk.rosreestr.ru` → 301 → `nspd.gov.ru/map?thematic=PKK`. Отдельного ПКК-ArcGIS API больше нет.
- **Поиск участка** `/api/geoportal/v2/search/geoportal?query=<КН>` — открыт, ~0.13с, без WAF. В `bot/services/nspd.py` это **уже** fast-path (`_fast_geoportal_http_search`, таймаут 1–3.5с) → Playwright fallback. Менять нечего.
- **ЗОУИТ WMS** `/api/aeggis/v2/{layer}/wms?...REQUEST=GetFeatureInfo&INFO_FORMAT=application/json` — **22 из 25 слоёв отвечают прямым curl ~0.06с, без WAF**. НО 3 слоя требуют браузерной сессии: **37576 водоохранная, 37582 СЗЗ → 500 «failed to request permissions for layer (код=1201)»; 872195 → 403**. Простой `curl /map` куки НЕ ставит — права даёт именно загрузка SPA в Playwright.
- **`bot/services/land_constraints.py` (ЗОУИТ) и `nspd_public_valuation.py` (соседи) — пока full Playwright** (~1 ГБ Chromium на холодный отчёт; коммент в `handlers/cadastral.py:369`).

**РЕАЛИЗОВАНО 2026-06-18 (A-lite):** `land_constraints.py` переведён на HTTP-first. `_fetch_features_http` (TCPConnector ssl=False + `_NSPD_HTTP_HEADERS` из nspd.py) для 22 слоёв; `_GATED_LAYERS={37576,37582,872195}` → fallback на Playwright (`_fetch_features_playwright`). Слои параллельны через `asyncio.gather`+`Semaphore(8)`, одна общая ClientSession. Замер 4 КН: 26-45с → 11-19с (1.5-2.7×), зоны 1:1 (ничего не потеряно), E2E через живой TG OK. Откат: `land_constraints.py.bak` на мини. **Грабли: без ssl=False голый aiohttp к nspd.gov.ru падает SSLCertVerificationError (сертификат Минцифры) → молчаливая потеря зон.** Детали: Obsidian Changelog ч.67 + Decisions D-nspd-zouit-http-fastpath. См. [[zemlya_rosreestr_opendata]].
