【发布时间】:2012-10-30 14:13:48
【问题描述】:
我正在为 Snowplow 构建一个 event collector in Clojure(使用 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复制了此内容,以确认间歇性不是浏览器缓存问题 - 我在命令行 (
cat original.gif | base64) 生成了"R01GOD..."base64 字符串,所以知道那里没有问题 - 像素发送成功后,我已验证其内容正确(
diff original.gif received-pixel.gif)
我是 Clojure 的新手——我猜我的代码中有一些令人尴尬的动态 gremlin,但我需要帮助来发现它!
【问题讨论】: