我可以将Access-Control-Allow-Origin:*添加到默认标头中

时间:2013-06-24 11:25:44

标签: ajax http-headers g-wan

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

一个简单的解决方法是将标头:Access-Control-Allow-Origin:*添加到HTTP响应中。问题是,我想避免使用G-WAN servlet返回静态HTML,只是添加标题。

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

2 个答案:

答案 0 :(得分:0)

  

默认情况下是否可以添加[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;
  }

这将适用于所有回复,静态和动态。

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

答案 1 :(得分:0)

我不得不花几个小时才能找到完美解决问题的以下几行代码,因此在下面共享它们。 首先,您必须在G-WAN虚拟主机的 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);
}

然后,杀死g-wan,以root身份运行以编译脚本,重新杀死并以您的Web用户身份运行(请使用g-wan根和www-data-user更改/ var / www路径,您正在使用的网络用户...此外,如果您未以root用户身份登录,请使用sudo):

/var/www/gwan -k
/var/www/gwan

(现在是CTRL-C退出)

/var/www/gwan -k
/var/www/gwan -d:www-data:www-data-user

现在,您所有的资源都将具有漂亮的 Access-Control-Allow-Origin:* 标头:-)