我目前正在运行一个托管静态HTML文件的G-WAN服务器。现在我正在使用iframe来显示这些文件的内容。我希望能够使用JavaScript加载跨域。默认情况下,浏览器不允许这样做。
一个简单的解决方法是将标头:Access-Control-Allow-Origin:*添加到HTTP响应中。问题是,我想避免使用G-WAN servlet返回静态HTML,只是添加标题。
默认情况下是否可以添加标题?
答案 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:* 标头:-)