|   |   | 
| 
 | Http севрис - исключение платформы на ответ с кодом 422 | ☑ | ||
|---|---|---|---|---|
| 0
    
        Daniilvb 28.09.20✎ 12:39 | 
        Всем доброго дня!
 Столкнулся с непонятным поведением http сервиса. Для теста создал запрос get с простым обработчиком: Функция testget(Запрос) Ответ = Новый HTTPСервисОтвет(422); Возврат Ответ; КонецФункции В файловом варианте получаю корректный пустой ответ с кодом 422. А в серверном (mssql и posgres) исключение платформы с кодом 400 и ошибкой 1С:Enterprise 8 application error: Некорректные символы в заголовке http. Если код изменить на Ответ = Новый HTTPСервисОтвет(400), то работает корректно и в файловом, и серверном варианте. Кто-нибудь сталкивался с таким поведением? | |||
| 1
    
        Daniilvb 28.09.20✎ 12:56 | 
        Поведение одинаковое на Apache 2.4 и IIS 10.0. Платформа 8.3.17.1549.     | |||
| 2
    
        Daniilvb 28.09.20✎ 22:55 | 
        По последним тестам: коды с 400 по 417 отрабатывают штатно, а с 418 по 499 все выдают одно исключение:
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>1C:Enterprise 8 application error</title> </head> <body> <h2>1C:Enterprise 8 application error:</h2>Некорректные символы в заголовке HTTP: [ Content-Length: 8] </body> </html> Может кто-то даст направление, в котором следует копать ) | |||
| 3
    
        Asmody 28.09.20✎ 23:25 | 
        422 это для webdav. думаю, что платформа хочет каких-то заголовков соответствующих     | |||
| 4
    
        Daniilvb 29.09.20✎ 08:47 | 
        (3) Непонятно, почему тогда в файловом варианте всё работает.     | |||
| 5
    
        trad 29.09.20✎ 09:37 | 
        (4) версии платформы одинаковые в файловом и серверном варианте?     | |||
| 6
    
        Daniilvb 29.09.20✎ 10:05 | 
        (5) Да, версии одинаковые. Еще была попытка на какой-то 8.3.16, но результат отрицательный.     | |||
| 7
    
        Daniilvb 29.09.20✎ 10:07 | 
        Думаю уже над костылем, может кто подскажет элегантное решение? Отдавать в сервисе 1С код 400, а на Apache(возможно, скриптом php) подменять код на 422.     | |||
| 8
    
        Garykom гуру 29.09.20✎ 10:08 | 
        Ответ.Заголовки.Вставить("Content-Type","application/json; charset=utf-8");     | |||
| 9
    
        Daniilvb 29.09.20✎ 10:08 | 
        Проблема еще в том, что в теле есть информация, которую нужно сохранить. А изменить только код ответа с 400 на 422.     | |||
| 10
    
        Garykom гуру 29.09.20✎ 10:09 | 
        (8)+ В смысле установи заголовки и тело ответа     | |||
| 11
    
        Garykom гуру 29.09.20✎ 10:09 | 
        Функция testget(Запрос)
 Ответ = Новый HTTPСервисОтвет(422); Ответ.Заголовки.Вставить("Content-Type","application/json; charset=utf-8"); //... Возврат Ответ; КонецФункции | |||
| 12
    
        trad 29.09.20✎ 10:11 | 
        (11) я пробовал. это не помогает     | |||
| 13
    
        Daniilvb 29.09.20✎ 10:11 | 
        (8) В сообщении привел урезанный вариант, на котором воспроизводится проблема. В рабочем варианте было так:
 Ответ.Заголовки.Вставить("Content-type", "application/json"); Ответ.Заголовки.Вставить("Charset", "utf-8"); | |||
| 14
    
        Garykom гуру 29.09.20✎ 10:13 | 
        (13) тело покажи в hex     | |||
| 15
    
        Daniilvb 29.09.20✎ 10:18 | 
        (14) Так проблема даже с пустым телом и любыми заголовками. Сейчас посмотрю, как в hex перегнать.     | |||
| 16
    
        trad 29.09.20✎ 10:20 | 
        в доке к HTTPСервисОтвет сказано:
 "Причина (Reason) Содержит текстовую расшифровку кода HTTP-статуса. Для стандартных статусов в ответе формируется автоматически." Следовательно для всякой экзотики причину надо задавать самому. В общем так работает: Ответ = Новый HTTPСервисОтвет(422, "Unprocessable Entity"); Возврат Ответ; | |||
| 17
    
        Garykom гуру 29.09.20✎ 10:27 | 
        (16) Гы я понял. 
 >[ Content-Length: 8] NULL * 2 (1C символы 2 байтами кодит) = ? | |||
| 18
    
        Daniilvb 29.09.20✎ 10:36 | 
        (16) Громаднейшее спасибо! Я в этом тупике просидел много часов! Но так и непонятно, почему в файловой и без этого работает.     | |||
| 19
    
        Garykom гуру 29.09.20✎ 11:03 | 
        (18) Вероятно файловая возвращает в веб-сервер пустую строку вместо Null     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |