我正在Clojure中为Snowplow构建一个事件收集器(使用 Ring/Compojure),并且在使用 Ring 提供透明像素时遇到了一些麻烦。这是我发送像素的代码:
(ns snowplow.clojure-collector.responses
(:import (org.apache.commons.codec.binary Base64)
(java.io ByteArrayInputStream)))
(def pixel-bytes (Base64/decodeBase64 (.getBytes "R0lGODlhAQABAPAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==")))
(def pixel (ByteArrayInputStream. pixel-bytes))
(defn send-pixel
[]
{:status 200
:headers {"Content-Type" "image/gif"}
:body pixel})
当我启动服务器时,我第一次点击路径时send-pixel
,像素已成功传送到我的浏览器。但是第二次——以及之后的每一次——Ring 都没有发送任何正文(并且内容长度为 0)。重新启动服务器,它是相同的模式。
有几件事不是:
- 我已经复制了这个
wget
,以确认间歇性不是浏览器缓存问题 "R01GOD..."
我在命令行 ( )生成了base64 字符串,cat original.gif | base64
所以知道那里没有问题- 当像素发送成功时,我已经验证了它的内容是正确的 (
diff original.gif received-pixel.gif
)
我是 Clojure 的新手——我猜我的代码中有一些令人尴尬的动态 gremlin,但我需要帮助来发现它!