Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / http код ответа в cache2010 / 13 сообщений из 13, страница 1 из 1
13.03.2012, 10:31
    #37702063
slavb18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
Установили cache2010, до этого стояла cache 5.0.21
в cache2010 не могу добиться вывода произвольного http кода в ответе csp-сервиса
все нестандартные коды cache заменяет на 500 Internal Server Error

под отладчиком посмотреть не получается, после выхода из OnPreHTTP отладчик ругается на отсутствие %SYS.cspServer.INT
Decos, который работал на cache 5 тоже что то его не берет, валится на
<UNDEFINED>startchar+6^%Decos ^Decos("%SYS.cspServer","Vars",-32)

кто нибудь видел может где в каше справочник http кодов ответов?

вот пример класса который должен выводить http код 450
если меняю например на 404 или 420 - каше проглатывает. а 450 уже меняет на 500

Class Report.Test Extends %CSP.Page
{

ClassMethod OnPreHTTP() As %Boolean
{
s %response.Status="450 test error"
q 1
}

ClassMethod OnPage() As %Status
{
w "test",!
Quit $$$OK
}

}
...
Рейтинг: 0 / 0
13.03.2012, 10:51
    #37702107
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
%SYS.cspServer.int конечно же не будет, он закрыт

пытались сделать декомпиляцию, а зачем ?, и кто нибудь ее допилил до 2010 версии, думаю вряд ли.

про ошибку 500 полагаю это просто защита, чтобы браузеру не ушел код который он не будет знать как обработать
думаю не стоит использовать нестандартные коды ошибок HTTP
...
Рейтинг: 0 / 0
13.03.2012, 11:08
    #37702152
slavb18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
DAiMor,

нигде кроме cache такого ограничения на коды нет
и дело в том что уже корпоративная система рассчитана на такие коды
не хочется переписывать только из-за одной cache, хочется допилить или обойти как нибудь
...
Рейтинг: 0 / 0
13.03.2012, 12:54
    #37702476
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
slavb18,

в общем проблема не в Cache, он все отдает как говорят, судя по всему меняет код встроенный Apache
когда я делаю запросы через IIS то код статуса совпадает

данная проблема говорит о том что не желательно отходить от стандарта
...
Рейтинг: 0 / 0
13.03.2012, 12:58
    #37702486
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
DAiMorslavb18,

в общем проблема не в Cache, он все отдает как говорят, судя по всему меняет код встроенный Apache
когда я делаю запросы через IIS то код статуса совпадает

данная проблема говорит о том что не желательно отходить от стандарта

либо что скорее всего из-за различий версий встроенного apache
в 2008 был apache 2.0
в 2010 уже apache 2.2
...
Рейтинг: 0 / 0
13.03.2012, 14:05
    #37702653
slavb18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
DAiMor,

апач сторонний, и один и тот же, что для cache 5, что и для cache2010
различие только в том что cache2010 работает через модуль CSPa22.so (без cspnsd)
попробую тогда туда покопать.
PS. различие в кодах делали специально, чтобы не путать кто сказал 403 например - апач или приложение, сделали в приложении все коды +50, 403->453.
...
Рейтинг: 0 / 0
14.03.2012, 13:56
    #37704758
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
slavb18 ,

Попробуйте включить расширенное журналирование на уровне CSP-Шлюза и/или Apache и посмотрите, что Вам вернётся.

У меня (Cache for Windows (x86-64) 2012.2 (Build 528_1U)) в обоих журналах возвращается правильный статус.

Сделал следующее:
код на ZENClass my.test1 Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <html>
  test
  </html>
</page>
}

/// Zen page notification of an HTTP request. This method can be overwritten
/// by subclasses.<br/>
/// This is called <em>before</em> the standard Zen pre-HTTP processing occurs.
ClassMethod %OnPreHTTP() As %Boolean [ ServerOnly = 1 ]
{
  s %response.Status="450 test error"
  q 1
}

}
включил в Apache журналирование:
в файле %CacheHome%\httpd\conf\httpd.conf раскомментировал строку
Код: plaintext
CustomLog logs/access.log common


включил в CSP-Шлюзе уровень журналирования "EV3"

Результаты:

CSP.log
Код: xml
1.
2.
3.
4.
5.
6.
...
HTTP Headers
HTTP/1.1 450 test error
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
...


access.log
Код: vbnet
1.
2.
3.
...
127.0.0.1 - - [14/Mar/2012:11:23:26 +0200] "GET /csp/test/my.test1.cls?CSPCHD=0...GmgF5Q8xhhQ--&CSPSHARE=1 HTTP/1.1" 450 3785
...
...
Рейтинг: 0 / 0
15.03.2012, 12:06
    #37706298
slavb18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
servit,

посмотрел, в логах апача и csp - код 455, но клиенту приходит 500

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
curl -v  http://vulkan:57773/csp/test/Report.Test.cls 
* About to connect() to vulkan port 57773 (#0)
*   Trying 10.15.16.37... connected
* Connected to vulkan (10.15.16.37) port 57773 (#0)
> GET /csp/test/Report.Test.cls HTTP/1.1
> User-Agent: curl/7.20.0 (i686-pc-linux-gnu) libcurl/7.20.0 OpenSSL/1.0.0c zlib/1.2.5
> Host: vulkan:57773
> Accept: */*
>
< HTTP/1.1 500 Internal Server Error
< Date: Thu, 15 Mar 2012 07:59:17 GMT
< Server: Apache
< SET-COOKIE: CSPSESSIONID-SP-57773-UP-csp-test-=0010000100001h7tWmsm96000093ODATVuD7FUU_iKUj4cDw--; path=/csp/test/;
< CACHE-CONTROL: no-cache
< EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT
< PRAGMA: no-cache
< CONTENT-LENGTH: 6
< Content-Type: text/html; charset=windows-1251
<
test
* Connection #0 to host vulkan left intact
* Closing connection #0

< HTTP/1.1 500 Internal Server Error
< Date: Thu, 15 Mar 2012 07:57:38 GMT
< Server: Apache
< SET-COOKIE: CSPSESSIONID-SP-443-UP-cache2010-csp-test-=000000020000147sl38i8s00007kbMEIG$27CFmUIDcIwl0g--; path=/cache2010/csp/test/; secure;
< CACHE-CONTROL: max-age=1, must-revalidate
< EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT
< PRAGMA: no-cache
< CONTENT-LENGTH: 6
< Content-Type: text/html; charset=windows-1251
<
test



при том 500 приходит только в режиме работы через CSPa22.so
в режиме cgi (nph-CSPcgi) отдается код 455

уже попробовал (безрезультатно) прописывать
Non_Parsed_Headers=Enabled и Non_Parsed_Headers=Disabled
...
Рейтинг: 0 / 0
15.03.2012, 18:28
    #37707274
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
slavb18 ,

Я Вам не смогу помочь.
Возможно, кто-то из коллег поможет.
...
Рейтинг: 0 / 0
01.08.2012, 13:33
    #37900317
alex171069
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
Все это замечательно конечно, все с выше сказанным понятно.
А вот может быть кто нибудь просветит мою темноту по вопросу наличия в классе %CSP.Page средств к прекращению какого либо ответа сервера браузеру ?
Т.е. есть ли методы на стороне сервера которые бы полностью блокировали ответ сервера браузеру после того же onPage .....
Чтобы на стороне клиента браузер бы даже ухом не повел после завершения работы класса наследованного от %CSP.Page ?
Спасибо!
Ps/ вы уж простите за мою темноту но уж очень знать охото !
...
Рейтинг: 0 / 0
01.08.2012, 13:37
    #37900329
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
alex171069,

всмысле, не совсем понятно, сервер что то все равно должен ответить либо разорвать соединение
ответить с кодом можно в OnPreHTTP, в %response.Status, код ответа если хотите ответить отличный от 200 ОК
...
Рейтинг: 0 / 0
01.08.2012, 14:35
    #37900464
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
alex171069 ,

Посмотрите %CSP.Response.Abort() (и UseASPredirect там же).

Проще в OnPreHTTP() вернуть 0 , тем самым предотвратив вызов OnPage()
Не вижу смысла странице позволить начать делать какую-то работу, например генерировать большой долгий отчёт, чтобы потом в итоге ничего не вернуть.
...
Рейтинг: 0 / 0
02.08.2012, 10:37
    #37901428
alex171069
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
http код ответа в cache2010
По идее для предотвращения отправки данных надо задать параметр OutputBody в обработчике OnHTTPHeader как написано в HELP-e но при этом в браузер выводится сообщение, что сервер не предоставил никаких данных, к тому же приводит и quit 0 в OnPreHTTP()

Что касается длинного и долгого отчета то конечно же вы правы в том, что это бессмысленно отказываться от ответа сервера.
Но это если это отчет, а не что либо другое не требующее ответа сервера...
Спасибо всем кто обратил внимание на мой вопрос!
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / http код ответа в cache2010 / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]