让 Hunchentoot 完全不输出 headers

Get Hunchentoot to output no headers at all

我想 return 从 Hunchentoot (SBCL) 的网络调用中获取 TSV 文件,但希望用户只保存显示在页面上的原始结果,而不是使用单独的文件并下载 link(由于本地防火墙的复杂性,这很难)。

我不知道如何在没有任何 header 的情况下输出页面,即,使其只是纯原始文本。 (我知道浏览器会在 DOM 中弄乱 w/o headers,但不要在意;目标只是让用户保存页面,而不是阅读它.)

我尝试了

的各种组合

(setf (hunchentoot:content-type*) "text/plain")

(cl-who:with-html-output-to-string                                                                                            
          (*standard-output* nil :prologue nil)

并设置 content-type* 内部、外部和周围...但我总是得到 header 垃圾。

直接写入字符串

我尝试按如下方式定义处理程序:

(define-easy-handler (text :uri "/text") ()
  (setf (content-type*) "text/csv")
  "a,b,c")

当我在本地访问页面时,浏览器会自动下载一个文本文件,甚至不显示(这可能是我们可以在 Chrome 中更改的设置,我不知道)。

当我启用浏览器开发人员模式时,这是作为 HTTP 协议的一部分收到的响应 headers:

HTTP/1.1 200 OK
Server: ...
Date: ...
Content-Type: text/csv; charset=utf-8
Content-Length: 5
Connection: keep-alive

但文件本身只是字符串 a,b,c.

如果我将 content-type 更改为 "text/plain",那么浏览器会成功显示文本,并且没有其他任何内容(HTTP headers 相同)。

备注

如果您不打算构建 HTML 文档,则不需要使用 cl-who 宏,实际上最好不要使用。在任何情况下,您都可以在初始化接受器时提供自己的 REPLY-CLASS(请参阅 https://edicl.github.io/hunchentoot/#replies),并且可以非常 low-level 控制您作为回复发出的内容,包括 headers .但我不认为这对你的情况是必要的。我不太清楚你的问题出在哪里,但是发回纯文本是框架应该能够开箱即用的事情。如果可以,请添加更多详细信息。

正确答案是不使用Content-Dispositionheader吗?