Ajax 我可以在默认标题中添加Access Control Allow Origin:*吗

Ajax 我可以在默认标题中添加Access Control Allow Origin:*吗,ajax,http-headers,g-wan,Ajax,Http Headers,G Wan,我目前正在运行一个承载静态HTML文件的G-WAN服务器。现在我使用iframe来显示这些文件的内容。我希望能够用JavaScript跨域加载它们。默认情况下,浏览器不允许这样做 一个简单的修复方法是在HTTP响应中添加标题:Access-Control-Allow-Origin:*。问题是,我不想仅仅为了添加标题而创建一个用于返回静态HTML的G-WAN servlet 默认情况下是否可以添加标题 默认情况下是否可以添加[HTTP]头 当然,在G-WAN连接处理程序中添加以下代码: cas

我目前正在运行一个承载静态HTML文件的G-WAN服务器。现在我使用iframe来显示这些文件的内容。我希望能够用JavaScript跨域加载它们。默认情况下,浏览器不允许这样做

一个简单的修复方法是在HTTP响应中添加标题:Access-Control-Allow-Origin:*。问题是,我不想仅仅为了添加标题而创建一个用于返回静态HTML的G-WAN servlet

默认情况下是否可以添加标题

默认情况下是否可以添加[HTTP]头

当然,在G-WAN连接处理程序中添加以下代码:

  case HDL_BEFORE_WRITE:
  {
     char head[] = "Access-Control-Allow-Origin: *\r\n\r\n";
     http_header(HEAD_ADD, head, sizeof(head) - 1, argv);
     break;
  }
这将适用于所有回复,包括静态和动态回复


如果你想更具选择性,只需在上面的代码中添加你的过滤器。

我花了几个小时才找到这几行完美解决问题的代码,所以我在下面分享它们。 首先,您必须在G-WAN virtualhost的handlers文件夹中创建一个main.c文件(如果该文件夹不存在或已禁用,请创建/重命名该文件夹),并复制/粘贴以下内容:

// Add simple CORS header (Access-Control-Allow-Origin: *) to all resources

#include "gwan.h"   // G-WAN exported functions

int init(int argc, char *argv[])
{
    u32 *states = (u32*)get_env(argv, US_HANDLER_STATES);
    *states = (1 << HDL_BEFORE_WRITE);
    return 0;
}

void clean(int argc, char *argv[])
{
}

int main(int argc, char *argv[])
{
    char head[] = "Access-Control-Allow-Origin: *\r\n";
    http_header(HEAD_ADD, head, sizeof(head) - 1, argv);  
    return(255);
}
(现在按CTRL-C键退出)


现在,您所有的资源都将有一个漂亮的访问控制允许源代码:标题:-)

非常感谢您的回复。我是否必须在/handlers/dir中为我想要的主机名创建一个main.c文件?是的。查看示例,了解如何在init()中选择希望接收的通知(此处为HDL_BEFORE_WRITE)。上面的代码进入处理程序main()。请小心:使用“\r\n\r\n”会使当前浏览器抱怨编码无效。如RFC所述,标题必须以单个“\r\n”结尾。我为此浪费了几个小时:-)(如果有兴趣,请参阅下面我的即用main.c)
/var/www/gwan -k
/var/www/gwan
/var/www/gwan -k
/var/www/gwan -d:www-data:www-data-user