Документ Word, переданный в ответ HTTP, вызывает требование 401 аутентификации

Всем доброе утро,

У меня есть веб-приложение, использующее классический ASP, размещенное на IIS 7.5. Мне нужно создать текстовый документ и передать обратно клиенту для отображения, однако, когда документ передается в ответ, что-то (настройка IIS?) Вызывает ошибку 401 — и я не могу отследить его.

Коллега очень любезно предоставил мне некоторый код C ++, который имеет дело со сборкой документов & потоковая передача и ASP-страница, которая создает COM-объекты, выполняет вызовы и т. д.

Документ начинает жизнь как шаблон в виртуальном каталоге IIS вне моего приложения ASP. Мы делаем копию, выполняем некоторые операции поиска и замены, а затем передаем их в ответ с правильным MIME-типом, чтобы браузер мог обработать его так, как считает нужным.

Кажется, как только потоковая передача имеет место (через вызов ASPTypeLibrary::IResponsePtr piResponse->BinaryWrite()) ответ 401 отправляется обратно до тех пор, пока ответ не будет выглядеть нормально.

Сайт использует проверку подлинности с помощью форм, и к этому моменту я вошел в систему, и запрос, который я вижу в fiddler, определенно содержит действительные данные сеанса, а остальная часть сайта удовлетворена моей проверкой подлинности.

Есть идеи? (он спрашивает с запиской отчаяния)

постскриптум Я понимаю, что я не перечислил весь код, я могу, если это поможет, хотя …


Сюжет утолщается …

У меня был успех с использованием страницы ASP для потоковой передачи файла в вывод с помощью и ADODB.Stream объект.

Когда это успешно, Fiddler получает два HTTP-запроса / ответа; первый запрос возвращает 401, затем браузер отправляет другой запрос с другими данными cookie, который возвращает успешный результат.

Когда мой COM-объект используется, два запроса происходят, но второй запрос также получает 401 …

Указывает на некоторые настройки безопасности, связанные с COM-объектом? Что-то я не добавляю к ответу с COM-объектом?


Что касается моего ответа Эрику, мой коллега немного поработал и заставил эту штуку работать, хотя я все еще немного озадачен тем, почему это было вызвано, хотя …

Линия, которую изменил Магический Эл, была такой:

piResponse->AddHeader( _T("Content-Length"), (LPCTSTR)Length );

Который вызывается, пока создается ответ, и он закомментировал его.

Видимо он заметил, что длина написана BinaryWrite выходил на 13 байт больше, чем длина файла. Он говорит мне, что это может быть потому, что он записывает зарезервированные блоки WORD из Variant это дано.

Таким образом, заголовок ответа немного искажен, и результатом является ошибка нарушения HTTP в fiddler, которую я пропустил, и где-то между клиентом и объектом COM ответ искалеченного 200 заменяется на 401.

Я полагаю, что мораль этой истории заключается в том, что вы всегда должны обращать внимание на ошибки скрипача и Content-Length верно.

Мой новый вопрос: почему 401? почему не 500? И что, вероятно, будет выбрасывать это? это исходит от IIS?

Это HTTP текстовые регистры Fiddler для обмена:

GET GET [The page address - its on localhost and is an ASP page] HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-GB
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost
Cookie: SessionUID={E41F5378-FBE2-475E-8F9A-6416AFE2BAA0}; DisplayMethod=0; ShowDataTips=1; LOGONUSER={UserName Info}ASPSESSIONIDQARAQRBD={Session ID}  Authorization: Negotiate YH8GBisGAQUFAqB1MHOgMDAuBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICHqI/BD1OVExNU1NQAAEAAACXsgjiCwALADIAAAAKAAoAKAAAAAYBsR0AAAAPRE9DREVWLUpDV0RFVkVMT1BNRU5UHTTP/1.1 401 Unauthorized
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate oYIBYTCCAV2gAwoBAaEMBgorBgEEAYI3AgIKooIBRgSCAUJOVExNU1NQAAIAAAAWABYAOAAAABXCieJQEtMwe36vajD3zwEAAAAA9AD0AE4AAAAGAbEdAAAAD0QARQBWAEUATABPAFAATQBFAE4AVAACABYARABFAFYARQBMAE8AUABNAEUATgBUAAEAFABEAE8AQwBEAEUAVgAtAEoAQwBXAAQAOABEAGUAdgBlAGwAbwBwAG0AZQBuAHQALgBEAG8AYwB1AG0AYQB0AGkAbwBuAC4AYwBvAC4AdQBrAAMATgBEAE8AQwBEAEUAVgAtAEoAQwBXAC4ARABlAHYAZQBsAG8AcABtAGUAbgB0AC4ARABvAGMAdQBtAGEAdABpAG8AbgAuAGMAbwAuAHUAawAFACAARABvAGMAdQBtAGEAdABpAG8AbgAuAGMAbwAuAHUAawAHAAgAKRk7jhfZzQEAAAAA
Date: Thu, 13 Dec 2012 09:52:25 GMT
Content-Length: 341
Proxy-Support: Session-Based-Authentication

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Not Authorized</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Not Authorized</h2>
<hr><p>HTTP Error 401. The requested resource requires user authentication.</p>
</BODY></HTML>------------------------------------------------------------------

GET [The page address - its on localhost and is an ASP page] HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-GB
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Cookie: SessionUID={E41F5378-FBE2-475E-8F9A-6416AFE2BAA0}; DisplayMethod=0; ShowDataTips=1; LOGONUSER={UserName Info}ASPSESSIONIDQARAQRBD={Session ID}
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIGAbEdAAAAD4GPyFfTAkcs1KpJqG4eT0ujEgQQAQAAAPUXp1AtIpqEAAAAAA==
Host: localhostHTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Thu, 13 Dec 2012 09:52:27 GMT
Content-Length: 6630
Proxy-Support: Session-Based-Authentication<HTML Page telling you about the error which gets displayed when you cancel the authentication dialog.>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector