题 从Nginx配置回复200而不提供文件


我已经将Apache配置为发回200响应,而不使用此配置行提供任何文件

Redirect 200 /hello

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

我知道我可以添加一个索引文件并实现相同的功能,但是在配置中执行它意味着可以减少一个问题。


91
2017-11-01 14:54






答案:


是的你可以

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;
}

197
2018-03-27 14:05



如何在响应中添加换行符? gangnam\nstyle? - tback
@tback当然是对的 - cadmi
只需添加换行符! Nginx配置指令不绑定到单行,它们以分号结束。 - Emil Vikström
add_header对我不起作用,因为它添加了另一个标题而不是替换旧的“Content-type”。在我的回复中,我有2个'内容类型'标题:$ curl -v localhost / healthcheck / h1_pio> GET / healthcheck / h1_pio HTTP / 1.1> User-Agent:curl / 7.38.0>主机:localhost>接受: / > <HTTP / 1.1 200 OK <日期:2016年10月11日星期二13:27:53 GMT <Content-Type:application / octet-stream <Content-Length:25 <Connection:keep-alive <Content-Type:application / JSON - jmcollin92
@ jmcollin92如果你在其他地方声明了一个现有的default_type,就会发生这种情况。您可以使用覆盖它 default_type text/plain; 在位置块的内部代替 add_header 指示。 - tjb1982


你需要使用204,因为Nginx不允许200没有响应体。要发送204你只需使用 返回指令 至 return 204; 在适当的位置。


18
2017-11-02 11:52





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

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


2
2017-11-01 15:39



当然,把它变成204,我该怎么做?虽然我非常怀疑任何浏览器都会被空体混淆。 - Theo
一个空体仍然是一个响应,带有一个对象,例如一个空白的index.html。你问的是提供200响应没有附加资源(没有提供文件)。至于在nginx上如何做到这一点,我需要自己查一下,我只是曾经在apache上做过这件事,我不记得了。 - sandroid
304似乎会发送所有错误的信号,如调试和临时返回。 - Kzqai