을 요청구글 앱 엔진 HTTP의 HEAD에 대한 리디렉션/Webapp2 내가이 같은 URL을 처리하는 구글 앱 엔진과 webapp2의 RedirectRoute 방법을 사용하고
app = webapp2.WSGIApplication([
RedirectRoute('/notes/', handler=notes, strict_slash=True, name="notes"),
...
])
이 예상대로 작동합니다 /notes/
에 대한 요청 내 핸들러에 의해 처리됩니다 /notes
에 대한 요청은 /notes/
으로 리디렉션되는 HTTP/1.1 301 Moved Permanently
이됩니다.
정확히 내가 원하는 것.
하지만 이제는 HEAD
처리기를 추가했습니다. /notes/
에 대해서는 정상적으로 작동하지만 /notes
에 대한 HEAD 요청은 내가 예상했던 것보다 HTTP/1.1 405 Method Not Allowed
이됩니다. 또 다른 301 Moved Permanently
입니다. 그것은 리디렉션도 아니고 내 처리기로도 연결되지 않습니다.
무엇이 누락 되었습니까? 이 예상되는 동작입니까? HEAD 요청을 어떻게 리디렉션해야합니까?
아래 알렉스 마르 텔리의 아이디어를 바탕으로 편집
이 작동하지만, 나는 내가 잘못 또는 적어도 어려운 방법 일을하고 있어요 같은 느낌 또 다른 방법이 아니다 너무 놀랐어요.
import webapp2
from webapp2_extras.routes import RedirectRoute
class myRedirectHandler(webapp2.RedirectHandler):
def head(self, *args, **kwargs):
return self.get(*args, **kwargs)
class myRedirectRoute(RedirectRoute):
def _get_redirect_route(self, template=None, name=None):
template = template or self.template
name = name or self.name
defaults = self.defaults.copy()
defaults.update({
'_uri': self._redirect,
'_name': name,
})
new_route = webapp2.Route(template, myRedirectHandler,
defaults=defaults)
return new_route
HEAD 요청 지금 리디렉션하지만 그만한 가치가 있을지 확실하지 않다 :
모두 webapp2.RedirectHandler
및 webapp2_extras.routes.RedirectRoute
작품을 하위 클래스.
아마도이 질문은 도움이 될 것입니다. http://programmers.stackexchange.com/q/99894 – mgilson
감사합니다. 그러나 우리가 HEAD 요청에 대한 응답으로 301 리디렉션을 보낼 수 있어야한다고 제안하는 것으로 보입니다. 이것이 내가 여기서하고 싶은 것입니다. –
@MarkM, 나는 그것이 많은 일에 동의한다 - 어쩌면 지금 그 자리에 놓고 webapp2의 저자에게 연장을 제안하면, 너는 "외부에서"보다는 그 코드를 편집하는 것이 훨씬 쉽다. 제대로하고있어. –