У меня есть приложение ISAPI, работающее на IIS, которое предназначено для поддержки загрузки файлов любого размера. На одном сервере загрузка, казалось бы, случайным образом завершается неудачно с 413 Request Entity Too Large
или тайм-аут при использовании HTTPS, и кажется, что единственным выходом является установка uploadReadAheadSize
на значение больше, чем загруженный файл. Однако это ограничит размер загружаемых файлов до 2 ГБ (максимальное значение uploadReadAheadSize
), что недопустимо.
uploadReadAheadSize
установлено значение по умолчанию (49152 байта).Что могло быть причиной этого и как мне это отладить?
(ПРИМЕЧАНИЕ: я встречал несколько похожих вопросов в StackOverflow и здесь, но в этих сценариях предполагается использовать либо клиентские сертификаты, либо приложение основано на WCF, чего у нас нет, либо проблема не зависела от uploadReadAheadSize
или TLS)
Кроме того, что является хорошим источником для понимания того, что uploadReadAheadSize
собственно и что происходит «под капотом»? Официальная документация Microsoft довольно скудна.
Получил аналогичную ошибку в IIS Express с Visual Studio 2017, и на самом деле это было uploadReadAheadSize
.
Ошибка:
Ошибка HTTP 413.0 - слишком большой объект запроса
Страница не была отображена из-за слишком большого размера объекта запроса.
Наиболее вероятные причины:
Веб-сервер отказывается обслуживать запрос, потому что объект запроса слишком велик.
Веб-сервер не может обработать запрос, потому что он пытается согласовать сертификат клиента, но объект запроса слишком велик.
URL-адрес запроса или физическое сопоставление с URL-адресом (т. Е. Путь физической файловой системы к содержимому URL-адреса) слишком длинный.
Что вы можете попробовать:
Убедитесь, что запрос действителен.
При использовании клиентских сертификатов попробуйте:
Увеличение system.webServer/serverRuntime@uploadReadAheadSize
Настройте конечную точку SSL для согласования клиентских сертификатов в рамках первоначального подтверждения SSL. (netsh http add sslcert ... clientcertnegotiation = enable) .vs \ config \ applicationhost.config
Здесь добавлено решение, но тот же принцип можно использовать и для реального IIS. редактировать \.vs\config\applicationhost.config
. Переключатель serverRuntime
из Deny
к Allow
как это:
<section name="serverRuntime" overrideModeDefault="Allow" />
Затем отредактируйте Web.config
со следующими значениями:
<system.webServer>
<serverRuntime uploadReadAheadSize="10485760" />
...