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

问题描述 投票:3回答:2

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

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

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

ajax http-headers g-wan
2个回答
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;
  }

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

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


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根更改/ var / www路径,并使用www.data-user更改您正在使用的网络用户...也请使用sudo(如果您没有以root用户身份登录):

/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:*标头:-)

© www.soinside.com 2019 - 2024. All rights reserved.