我使用gwan进行图像生成,所以我需要设置正确的内容类型,但是在一些加载之后G-WAN 3.12.26会添加自己的内容类型为text / html的标头,并返回带有2个http标头的页面。
如何重现:
使用gwan包中的setheaders.c servlet,启动gwan并打开此页面,让我们说http://localhost/?setheaders.c
,你会得到这个(正确答案):
HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 20:37:52 GMT
Last-Modified: Sat, 29 Dec 2012 20:37:52 GMT
Content-type: text/html
Content-Length: 371
Connection: close
<!DOCTYPE HTML><html lang="en"><head><title>Setting response headers</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link href="imgs/style.css" rel="stylesheet" type="text/css"></head><body style="margin:16px;"><h1>Setting response headers</h1><br>This reply was made with custom HTTP headers, look at the servlet source code.<br></body></html>`
现在运行apache bench:ab -n 1000 'http://localhost/?setheaders.c'
(1000个请求足以支持我的系统)。
不要重新启动GWAN,再次打开http://localhost/?setheaders.c
这就是你应该得到的(错误的响应,2个http标题):
HTTP/1.1 200 OK
Server: G-WAN
Date: Sat, 29 Dec 2012 20:43:34 GMT
Last-Modified: Fri, 16 Jan 1970 16:53:33 GMT
ETag: "be86ada7-14b40d-16f"
Vary: Accept-Encoding
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Content-Length: 367
Content-Encoding: gzip
Connection: close
HTTP/1.1 200 OK
Date: Sat, 29 Dec 2012 20:43:34 GMT
Last-Modified: Sat, 29 Dec 2012 20:43:34 GMT
Content-type: text/html
Content-Length: 371
Connection: close
<!DOCTYPE HTML><html lang="en"><head><title>Setting response headers</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link href="imgs/style.css" rel="stylesheet" type="text/css"></head><body style="margin:16px;"><h1>Setting response headers</h1><br>This reply was made with custom HTTP headers, look at the servlet source code.<br></body></html>
如果gzip和x-gzip未在请求标头(Accept-Encoding: gzip, x-gzip
)中设置为可接受的编码,则GWAN会返回正确的响应。
是否可以解决这个修改只是servlet?如果是,那怎么办?
答案 0 :(得分:0)
您是否设置了MIME type
中显示的fractal.c
:
// -------------------------------------------------------------------------
// specify a MIME type so we don't have to build custom HTTP headers
// -------------------------------------------------------------------------
char *mime = (char*)get_env(argv, REPLY_MIME_TYPE);
// note that we setup the FILE EXTENTION, not the MIME type:
mime[0] = '.'; mime[1] = 'g'; mime[2] = 'i'; mime[3] = 'f'; mime[4] = 0;
如果您这样做,则无法混淆自动标题功能。
除此之外,由于我们的直接系统调用和GLIBC包装,v3.12存在许多不稳定性问题(文件时间失败,pthread失败,信号失败等) - 最初的目的是使程序在所有版本上运行Linux。
我们已经找到(感谢像您这样的许多报告),而不是试图逐个解决这些问题(毫无意义地与GLIBC打交道,这是一个移动目标,有许多不同版本,每个版本都有自己的错误和特性)更安全的路径是放弃GLIBC。
这就是G-WAN v4将要做的事情,仅仅几天之后。