如何在scala play framework 2.1上返回唯一的響應頭(HTTP HEAD方法)?Play框架2.1 HTTP HEAD方法響應
2
A
回答
0
可惜的是有Java的解決方案,但也許你會「轉換」它斯卡拉,總體思路是:
- 抓住HEAD請求發送到專用方法
- 方法
autoHead(String originalPath)
使用WebServices轉發參數發送GET請求並僅返回響應的狀態。 - 它增加了額外的標頭
X_FORWARD_FROM_HEAD
因此,如果您的操作是在每次打擊後向DB記錄某些內容,則可以避免出現HEAD
請求。
代碼:
/**
* Tries to get headers of resource with WebServices and return headers only.
*
* @param originalPath Path of the resource
* @return Headers for HEAD request
* @throws IllegalAccessException
*/
public static Result autoHead(String originalPath) throws IllegalAccessException {
WS.WSRequestHolder forwardedRequest = WS.url("http://" + request().host() + request().path());
// this header will allow you to make additional choice i.e. avoid tracking the request or something else
// see condition in index() action
forwardedRequest.setHeader("X_FORWARD_FROM_HEAD", "true");
// Forward original headers
for (String header : request().headers().keySet()) {
forwardedRequest.setHeader(header, request().getHeader(header));
}
// Forward original queryString
for (String key : request().queryString().keySet()) {
for (String val : request().queryString().get(key)) {
forwardedRequest.setQueryParameter(key, val);
}
}
// Call the same path but with GET
WS.Response wsResponse = forwardedRequest.get().get();
// Set returned headers to the response
for (Field f : Http.HeaderNames.class.getFields()) {
String headerName = f.get(null).toString();
if (wsResponse.getHeader(headerName) != null) {
response().setHeader(headerName, wsResponse.getHeader(headerName));
}
}
return status(wsResponse.getStatus());
}
/**
* Checks if request if forwarded from HEAD request
*
* @return true if 'X_FORWARD_FROM_HEAD' header exists and is set to true
*/
public static boolean forwardedFromHead() {
return (request().getHeader("X_FORWARD_FROM_HEAD") != null && "true".equals(request().getHeader("X_FORWARD_FROM_HEAD")));
}
路線:
HEAD / controllers.Application.autoHead(originalPath:String ?= "/")
HEAD /*originalPath controllers.Application.autoHead(originalPath:String)
0
您可以添加HEAD路線,旁邊的GET路線,像這樣:
GET /assertion controllers.Assertion.get
HEAD /assertion controllers.Assertion.head
在實現方法,你可以調用GET方法,並傳遞一個標誌,以壓低身體,我猜。
0
什麼返回EmptyContent作爲內容
Action {
....
Ok(EmptyContent())
}
+0
不想在消息體但內容長度 HTTP請求頭:// WWW。 w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 – user3013111
相關問題
- 1. 我無法爲Play框架提供JSON響應2.1
- 2. Play框架2.1應用程序部署
- 3. New Relic Monitoring for Play框架2.0.4和2.1
- 4. Play 2.1 for Http Server
- 5. Play框架2.1 Neo4j嵌入式
- 6. HTTP HEAD響應 - 設置內容長度
- 7. Play框架 - java.nio.channels.ClosedChannelException
- 8. 使用ASP.NET響應HTTP HEAD請求(vb)
- 9. 使用ASP.NET MVC響應HTTP HEAD請求
- 10. 「303其他」在HTTP HEAD響應中
- 11. 在Eclipse中使用多個項目與Play框架2.1.x
- 12. GWT如何使用Http promise來做異步響應,比如Play!框架
- 13. 使用Play框架
- 14. CORS Play框架
- 15. 框架中的方法不響應方法調用
- 16. Play框架中的Kerberos身份驗證2.1
- 17. Play框架分塊響應不包括塊大小
- 18. 如何在Play中重複請求!框架2.1?
- 19. Play框架,JSON重載的方法值[應用]
- 20. 如何在Play框架中安裝插件2.1
- 21. Play框架和WCF
- 22. Play 2.1框架未檢測到進化變化
- 23. Play框架+ Postgres + Typesafe
- 24. Play框架+ Scala
- 25. Play上的框架整合阿帕奇四郎2.1
- 26. 在Play中設置HTTP標頭!框架Web應用程序
- 27. HTTP HEAD方法和流水線
- 28. OpenRasta是否支持HEAD HTTP方法?
- 29. HTTP HEAD方法的可靠性
- 30. Play框架中的期貨之間的時間延遲2.1
這樣獲得HEAD請求後,它必須發送一個GET請求到localhost THEN,sen d頭部作爲對HEAD請求的響應。我對嗎? 我認爲這對服務器性能不利。 有沒有辦法做這樣的事情? 'Ok(views.html.content())'或'SimpleResult(header = ResponseHeader(200),body = views.html.content())' 不希望消息體,但請求頭與內容-Length http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 – user3013111