让 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吗?
我想 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吗?