Donnerstag, 7. April 2011

Benutzerdefinierte HTTP Verben wie 'PURGE' mit Net::HTTP

Betreibt man eine Webanwendung beispielsweise hinter einem vorgelagerten Reverse-Proxy, so kann unter Umständen eine aktive Invalidierung der Cache-Inhalte des Proxys durch die Anwendung selbst erforderlich werden. Das bedeutet, dass die Anwendung aktiv den Reverse-Proxy anweist bestimmte URLs zu "vergessen". Proxys wie beispielsweise Squid bieten die Möglichkeit dies per HTTP mit dem nicht weiter standardisierten Verb "PURGE" zu erledigen. Bei anderen Proxys wie Varnish ist ein PURGE per HTTP zwar nicht vordefiniert aber relativ leicht zu konfigurieren.

Doch wie soll man einen solchen Request aus der Web-Anwendung absetzen? Im Ruby-Umfeld bietet Net::HTTP dafür die Möglichkeit eigene HTTP-Verben zu definieren. Dazu muss man an geeigneter Stelle die folgende Klasse definieren:
require 'net/http'

class Net::HTTP::Purge < Net::HTTPRequest
  METHOD = 'PURGE'
  REQUEST_HAS_BODY = false
  RESPONSE_HAS_BODY = true
end
Dies funktioniert natürlich äquivalent auch mit anderen Verben. Der Request selbst kann dann wie folgt abgesetzt werden:
  http = Net::HTTP.new("mein.proxy.de", "80")
  request = Net::HTTP::Purge.new("/url", "")
  http.request(request)

Keine Kommentare:

Kommentar veröffentlichen