Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Отладка CORS в Delphi 10.1 Berlin с клиентом на AngularJS

Delphi , Синтаксис , API реализация

Вопрос, поднятый пользователем, касается проблемы с CORS (Cross-Origin Resource Sharing) в сервере Datasnap REST, созданном с использованием Delphi 10.1 Berlin. Клиентом данного сервиса является AngularJS, который не может отправлять заголовок dssession внутри заголовка Pragma, что связано с ограничениями, наложенными браузером при обработке CORS-запросов. Даже при тестировании на одном устройстве, где клиент AngularJS работает на порту 8080, а сервер Datasnap на порту 8081, браузер определяет запросы как междоменные, и dssession не доходит до сервера.

Пользователь уже нашел решение для запуска сервера как StandAlone приложения, передавая dssession через URL и добавляя его в заголовок Pragma в событии WebModuleBeforeDispatch. Однако, при компиляции кода в виде ISAPI модуля для деплоя в производственной среде, заголовок dssession в Pragma не добавляется, что может быть связано с отсутствием передачи dssession через URL. Отладка ISAPI модуля затруднена, так как при подключении процесса w3wp.exe к отладчику Delphi, он замораживается и не отвечает на вызовы до отключения отладчика.

В подтвержденном ответе пользователь описывает, что для корректной обработки CORS-запросов сервером Datasnap необходимо в событии WebModule.BeforeDispatch отвечать на запросы, разрешая отправку кастомизированных заголовков, и установить Handled в True, чтобы Datasnap не пытался обработать OPTION-запрос как обычный.

Пример кода для обработки CORS-запросов:

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  Response.SetCustomHeader('Access-Control-Allow-Origin', '*');

  if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then
  begin
    Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers'));
    Handled := True;
  end;

  if FServerFunctionInvokerAction <> nil then
    FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker;
end;

Важные замечания:

  • Убедитесь, что сервер поддерживает обработку предварительных запросов (preflight handling) для CORS.
  • В некоторых средах, например в Delphi XE2, может потребоваться изменение имени поля Access-Control-Request-Headers на Access_Control_Request_Headers.
  • Если используется метод OPTIONS, то Handled должен быть установлен в True для обработки предварительных запросов.

Следуя этим рекомендациям, можно настроить сервер Datasnap для корректной работы с CORS-запросами от клиента на AngularJS.

Создано по материалам из источника по ссылке.

Пользователь сталкивается с проблемой CORS при использовании сервера Datasnap REST на Delphi 10.1 Berlin с клиентом на AngularJS и ищет решение для корректной обработки CORS-запросов в ISAPI модуле.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: API реализация ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 11:48:43/0.0051150321960449/1