Common lisp 让Hunchentoot完全不输出标题

Common lisp 让Hunchentoot完全不输出标题,common-lisp,sbcl,hunchentoot,Common Lisp,Sbcl,Hunchentoot,我想从Hunchentoot(SBCL)中的web调用返回一个TSV文件,但希望用户只将原始结果保存到页面上,而不是使用单独的文件和下载链接(由于本地防火墙的复杂性,这很难实现) 我不知道如何在没有任何标题的情况下输出页面,也就是说,使其成为纯原始文本。(我知道浏览器在DOM中没有标题的情况下会把页面弄得一团糟,但我不在乎;目标只是让用户保存页面,而不是读取页面。) 我试过各种不同的组合 (setf(hunchentoot:content-type*)“text/plain”) 及 和设置内容类

我想从Hunchentoot(SBCL)中的web调用返回一个TSV文件,但希望用户只将原始结果保存到页面上,而不是使用单独的文件和下载链接(由于本地防火墙的复杂性,这很难实现)

我不知道如何在没有任何标题的情况下输出页面,也就是说,使其成为纯原始文本。(我知道浏览器在DOM中没有标题的情况下会把页面弄得一团糟,但我不在乎;目标只是让用户保存页面,而不是读取页面。)

我试过各种不同的组合

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

和设置内容类型*内,外,和周围与。。。但我总是收到标题垃圾。

直接写入字符串 我尝试按如下方式定义处理程序:

(define-easy-handler (text :uri "/text") ()
  (setf (content-type*) "text/csv")
  "a,b,c")
当我在本地访问页面时,浏览器会自动下载一个文本文件,甚至不显示(这可能是我们可以在Chrome中更改的设置,我不知道)

启用浏览器开发人员模式时,以下是作为HTTP协议的一部分接收到的响应头:

HTTP/1.1 200 OK
Server: ...
Date: ...
Content-Type: text/csv; charset=utf-8
Content-Length: 5
Connection: keep-alive
但是文件本身就是字符串
a、b、c

如果我将内容类型更改为
“text/plain”
,则浏览器会成功显示文本,而不会显示其他内容(HTTP头是相同的)

评论 如果不打算构建HTML文档,则不需要使用
cl who
宏,事实上最好不要这样做。在任何情况下,您都可以在初始化接受程序(请参阅)时提供自己的
REPLY-CLASS
,并对作为回复发出的内容(包括标题)进行非常低级的控制。但我认为这在你的情况下是不必要的。我不清楚您的问题是从哪里来的,但是发送回纯文本是框架应该能够立即完成的事情。如果可以,请添加更多详细信息。

直接写入字符串 我尝试按如下方式定义处理程序:

(define-easy-handler (text :uri "/text") ()
  (setf (content-type*) "text/csv")
  "a,b,c")
当我在本地访问页面时,浏览器会自动下载一个文本文件,甚至不显示(这可能是我们可以在Chrome中更改的设置,我不知道)

启用浏览器开发人员模式时,以下是作为HTTP协议的一部分接收到的响应头:

HTTP/1.1 200 OK
Server: ...
Date: ...
Content-Type: text/csv; charset=utf-8
Content-Length: 5
Connection: keep-alive
但是文件本身就是字符串
a、b、c

如果我将内容类型更改为
“text/plain”
,则浏览器会成功显示文本,而不会显示其他内容(HTTP头是相同的)

评论
如果不打算构建HTML文档,则不需要使用
cl who
宏,事实上最好不要这样做。在任何情况下,您都可以在初始化接受程序(请参阅)时提供自己的
REPLY-CLASS
,并对作为回复发出的内容(包括标题)进行非常低级的控制。但我认为这在你的情况下是不必要的。我不清楚您的问题是从哪里来的,但是发送回纯文本是框架应该能够立即完成的事情。如果可以,请添加更多详细信息。

不使用标题是正确的答案吗?

不使用标题是正确的答案吗?

标题是http协议的一部分,我不确定我是否理解您想要做什么,我只想通过我完全控制的原始文本发送。Hunchentoot似乎坚持要添加标题。我想完全听写它发送的内容、标题和所有内容,在本例中,我将完全不使用它们(以及匹配的/body/html)。标题是http协议的一部分,我不确定我是否理解您想要做什么,我只想通过我完全控制的原始文本发送。Hunchentoot似乎坚持要添加标题。我想完全听写它发送的内容、标题和所有内容,在本例中,我将完全不使用它们(以及匹配的/body/html)。文档中完全清楚的一个小细节(或者至少我不清楚,但我可能只是忽略了它!)是您需要的(输出到字符串…),这就是为什么我使用cl-who:将html输出为字符串。典型用法是:(输出到字符串(*标准输出*nil)…)哦,谢谢,你说得对,写行是不必要的,它工作是因为函数返回其参数一个小细节,它在文档中完全清楚(或者至少我不清楚,但我可能只是错过了!)是你需要(输出到字符串…),这就是为什么我使用cl-who:将html输出为字符串。典型的用法是:(输出到字符串(*标准输出*nil)…)哦,谢谢,你说得对,写行是不必要的,它工作了,因为函数返回它的参数