我已将Apache配置为在不使用此配置行提供任何文件的情况下发回200响应

Redirect 200 /hello


我可以使用Nginx这样做吗?我不想提供文件,我只希望服务器以200响应(我只是记录请求)。

我知道我可以添加索引文件并实现相同的功能一件事,但是在配置中执行此操作意味着可以少出错的一件事。

评论

有人可能会争辩说,如果您不提供“文件”或任何内容,则应返回204 No Content,而不是200。

#1 楼

是的,您可以
location / {
    return 200 'gangnam style!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # if you want to see reply in browser, uncomment next line 
    # add_header Content-Type text/plain;
}


评论


如何在响应中添加换行符?江南\ nstyle?

–tback
15年12月28日在13:52

@tback当然,你是

–cadmi
16 Mar 9 '16 at 9:10

add_header对我不起作用,因为它添加了另一个标头而不是替换旧的“ Content-type”。在我的响应中,我有2个'Content-type'标头:$ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent:curl / 7.38.0> Host:localhost> Accept:/>
– jmcollin92
16-10-11在13:30

@ jmcollin92您的评论与提出的问题以及给出答案的问题无关。因为您显然拥有某种proxy_pass,fascgi_pass等...,但是我仍然回答位置/ healthcheck / h1_pio {#proxy_pass blablabla所需的东西; proxy_hide_header内容类型; add_header内容类型application / json; },请在正确的位置正确提问

–cadmi
16-10-12在23:43



如果您在其他地方声明了现有的default_type,则可能会发生@ jmcollin92。您可以使用default_type text / plain覆盖它;在location块中代替add_header指令。

–tjb1982
17年5月23日在17:55

#2 楼

您确实需要使用204,因为Nginx不允许200没有响应主体。要发送204,您只需在适当的位置对return 204;使用return指令即可。

评论


如果您尝试通过浏览器查看此内容,则看起来它什么也没做。那是故意的。您没有提供任何服务(204),它什么也不显示。为了证明您曾服役204,请使用curl。

– jnovack
19 Mar 19 '19在18:23



#3 楼

根据状态码定义,我相信您希望它是204,而不是200。响应中的资源需要200。否则我怀疑大多数理智的浏览器都会对此感到困惑。您可以使用的另一个是304,用于缓存内容。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

评论


当然,将其设置为204,我该怎么做?尽管我非常怀疑任何浏览器都会被一个空的身体所迷惑。

– Theo
2010年11月1日15:55



空的主体仍然是带有对象的响应,例如空白的index.html。您要求提供的响应为200,但没有附加资源(不提供文件)。至于如何在nginx上精确地执行此操作,我需要亲自检查一下,我只在apache上执行过一次,所以我记不起来了。

–sandroid
10-11-1在20:05



304似乎会为调试和临时返回之类的东西发送所有错误的信号。

– Kzqai
16年2月5日在20:18

#4 楼

要完成@Martin Fjordval的回答,请注意是否正在使用这种配置进行运行状况检查。

虽然204 HTTP代码在语义上非常适合运行状况检查(成功指示不包含任何内容),但有些服务并不成功。

即,我遇到了Google Cloud负载均衡器的问题。

评论


究竟。 Google Cloud Load Balancer要求输入200响应代码,以使实例处于健康状态,无论其身体如何。任何其他代码(甚至2xx代码)都将使运行状况检查失败。

– Maganap
20 Mar 18 '20 at 14:56

#5 楼

如果要返回格式化的html文本而不提供html文件:
location \ {
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>gangnam style!</h2>\n";
}

如果要返回无html格式的文本,请作为答复:
location \ {
    add_header Content-Type text/plain;
    return 200 'gangnam style!';
}

如果只想返回200:
location \ {
    return 200;
}

请记住:location块放在server块中。这是更多信息的文档。
附言:我在大量服务器上运行着类似的配置(格式为html)。