我一直在尝试将标头(特别是 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 或文档中找到好的示例
嗯,您是否尝试过在响应之前发送标头?
尝试更换:
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;