Scala Play Framework 2.1에서 응답 헤더 (HTTP HEAD 메서드) 만 반환하려면 어떻게해야합니까?
불행히도 Java 솔루션이 있지만 Scala로 '변환'할 수 있습니다. 일반적인 개념은 다음과 같습니다.
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)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다