sam*_*est 4 rest favicon scala akka spray
互联网说我应该把我的favicon.ico放在网站的根目录,以阻止Spray用巨大的堆栈跟踪堵塞我的日志.我不知道网站的根目录是什么意思,特别是在RESTful喷涂应用程序的上下文中.
假设我的项目在〜/ src/my-project中 - 我构建它(sbt assembly),并从这个位置运行它,我应该把favicon.ico放在哪里?我尝试输入〜/ src/my-project但我仍然得到了栈跟踪.
注意:如果我从浏览器直接访问API(而不是通过我们网站的实际前端),它只会引发异常.
大多数当前浏览器会自动favicon.ico在您网站的根目录中查找.所以,你必须处理他们的GET /favicon.ico http请求.最简单的方法是使用spray-routing's getFromResource:
import spray.routing.SimpleRoutingApp
import spray.http._
import MediaTypes._
object Main extends App with SimpleRoutingApp {
implicit val system = ActorSystem("my-system")
startServer(interface = "localhost", port = 8080) {
path("favicon.ico") {
getFromResource("favicon.ico", `image/x-icon`) // will look for the file inside your `resources` folder
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你已经有一些处理演员(并且不使用spray-routing),你将需要GET /favicon.ico直接在你的演员内部处理,返回如下内容:
def receive = {
case HttpRequest(GET, Uri.Path("/favicon.ico"), _, _, _) =>
sender ! HttpResponse(entity = HttpEntity(`image/x-icon`,
HttpData(new File("favicon.ico")))) //will take it from a file in application folder, you may also pass any array of byte instead of File
...
}
Run Code Online (Sandbox Code Playgroud)
有关第二个选项的更多信息,请参阅其他答案
PS如果你不想打扰favicon.ico文件 - 你可以StatusCodes.NotFound在两种情况下都返回:
complete(NotFound) 用于路由 sender ! HttpResponse(NotFound) 为你自己的演员因为它是在里面完成的SiteServiceActor.
此外,使用W3C的首选方法(将链接放在您的网页中)并不能保证跨浏览器兼容性,因为它取决于浏览器的搜索顺序,并且没有关于此的W3C标准(请参阅siteData-36).大多数浏览器似乎首先查看网站的根目录,即使您没有任何HTML页面.
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |