如何在AWS(ada Web服务器)中添加标头?

问题描述 投票:0回答:1

我一直在尝试将标头(特别是 CORS)添加到我的服务器响应中几个小时,但我无法在 ada 中找到使用 AWS 的方法。有人能帮我吗? (到目前为止,我只找到了将标头添加到客户端的方法,但没有找到作为服务器响应的方法)

请忽略代码有点乱,这是我在 Ada 中的第一个真正的项目,我只是在尝试。

with AWS.Client;
with AWS.Response;
with AWS.Server;
with AWS.Server.Status;
with AWS.Status;
with Ada.Text_IO;
with Ada.Strings.Unbounded;
with AWS.Headers;

procedure aws_test is`

   WS      : AWS.Server.HTTP;
   Headers : AWS.Headers.List;

   function HW_CB (Request : in AWS.Status.Data) return AWS.Response.Data is
      URI : constant String := AWS.Status.URI (Request);

      Test_Data : AWS.Response.Data :=
        AWS.Client.Get (URL => "http://192.168.190.129");

      Test_String   : constant String := AWS.Response.Message_Body (Test_Data);
      para          : Ada.Strings.Unbounded.Unbounded_String;
      test          : Integer         := 1;
      response_data : AWS.Response.Data;

    begin

      AWS.Headers.Add
        (Table => Headers, Name => "Access-Control-Allow-Origin",
         Value => "*");
      -- Allow common methods
      AWS.Headers.Add
        (Table => Headers, Name => "Access-Control-Allow-Methods",
         Value => "POST, GET, OPTIONS, PUT, DELETE");

      -- Allow all headers requested in the actual request
      AWS.Headers.Add
        (Table => Headers, Name => "Access-Control-Allow-Headers",
         Value => "*");

      -- Set max age to 86400 seconds (24 hours)
      AWS.Headers.Add
        (Table => Headers, Name => "Access-Control-Max-Age", Value => "86400");

      if URI = "/api/login" then
         -- ADD HERE
         test := test + 1;
         para := AWS.Status.Binary_Data (Request);

         Ada.Text_IO.Put_Line (Ada.Strings.Unbounded.To_String (para));
         -- Ada.Text_IO.Put_Line (Test_String);

         response_data := AWS.Response.Build ("text/html", "<p>Hello world !");
         AWS.Response.Set.Add_Header
           (response_data, Name => "Access-Control-Max-Age", Value => "86400");
         return response_data;
      else
         return AWS.Response.Build ("text/html", "<p>Hum...");
      end if;
    end HW_CB;

    begin
     AWS.Server.Start
      (WS, "Hotel AI", Callback => HW_CB'Unrestricted_Access, Port => 8_080);
     delay 20.0;
     AWS.Server.Shutdown (WS);
     while AWS.Server.Status.Is_Shutdown (WS) = False loop
      delay 5.0;
     end loop;
    end aws_test;

 

我只是想添加标头,这样我就不会在 Javascript 中标记 CORS。非常感谢您的帮助(我在网上寻找有关这些主题的优质资源有点困难)

我已经尝试了几种可能的方法(以及在人工智能等的帮助下),但我什至无法在 Github 或文档中找到好的示例

cors ada
1个回答
0
投票

嗯,您是否尝试过在响应之前发送标头?

尝试更换:

return AWS.Response.Build ("text/html", "<p>Hum...");

与:

return Result : AWS.Response.Data := AWS.Response.Build ("text/html", "<p>Hum...") do
   AWS.Headers.Send_Header(
        Socket    => SOCKET,
        Headers   => HEADERS
      );
end return;
© www.soinside.com 2019 - 2024. All rights reserved.