默认情况下,不需要指定Content-Length
这个响应头,Play框架会根据响应内容自动计算出来,如1
2
3def normal = Action {
Ok("Hello, Response")
}
会自动生成如下的响应头
1 | Content-Length:15 |
可以使用play.api.libs.iteratee.Enumerator
来生成响应内容,如
1 | def normal = Action { |
这时也会生成Content-Length
响应头,如下
1 | Content-Length:17 |
在Play框架中,会把所有的相应内容都加载到内存,再计算出响应内容的长度。如果响应内容很多,就会占用很多内容,这时就需要自己来指定Content-Length
来解决,如:
1 | def normal = Action { |
如果要处理文件,可以通过Ok.sendFile
方法,如
1 | def header = Action { |
这时会生成如下的响应头:
1 | Content-Disposition:attachment; filename="a.pdf" |
在浏览器访问时,会自动下载这个文件,文件名为a.pdf
也可以指定其他的下载文件名,如:
1 | def header = Action { |
这时生成的响应头如下:
1 | Content-Disposition:attachment; filename="custom.pdf" |
也可以通过指定inline
参数,让浏览器直接打开这个文件,如
1 | def header = Action { |
这时生成的响应头如下:
1 | Content-Length:54503 |
浏览器会直接显示支持的文件格式的内容。
在Play中,支持Chunked
传输形式,如
1 | def chunked = Action { |
也可以通过Enumerator
的apply
方法生成chunked的内容,如
1 | def chunked = Action { |
在Play中,可以通过chunked机制来实现comet,如
1 | def comet = Action { |
这样,在浏览器的控制台就会打印日志。
可以通过play.api.libs.iteratee.Enumeratee
来转换Enumerator
对象,如
1 | import play.api.libs.concurrent.Execution.Implicits._ |
也可以使用play.api.libs.Comet
帮助类
1 | def comet = Action { |