Closed rommsen closed 12 years ago
Es gibt die Möglichkeit ein widget.proxify zu machen (widget ist ein von Wookie gestellter Service). Leider gibt es hier scheinbar Probleme mit bestimmten Response Codes: http://markmail.org/search/?q=list:wookie#query:list%3Awookie+page:1+mid:fkfwfv7rmbtysqrc+state:results
Ausserdem ist das nicht offizielle W3C Api
Funktioniert über Cors: https://developer.mozilla.org/en-US/docs/HTTP_access_control http://www.html5rocks.com/en/tutorials/cors/?redirect_from_locale=de www.w3.org/TR/access-control/
In jeder Methode muss hierbei der Access-Control-Allow-Origin Header übergeben werden
return View::create($todos, HttpCodes::HTTP_OK, array(
'Access-Control-Allow-Origin' => '*',
));
Ausserdem gib es noch den Preflight Request, welcher abfragt was erlaubt ist. Dieser kann so implementiert werden:
/**
* @Route("/{id}.{_format}", defaults={"id" = null, "_format" = "~"}, name="options_todos")
* @Method({"OPTIONS"})
*/
public function optionsTodoAction()
{
return View::create(null, HttpCodes::HTTP_OK, array(
'Access-Control-Allow-Methods' => 'POST, GET, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Headers' => 'X-REQUESTED-WITH, content-type'));
}
Ich habe das jetzt durch das NelmioCorsBundle: realisiert
Das Bundle implementiert einen Listener, der die ganzen Header setzt. Dadurch wird auch die options Action unnötig. Hier meine Einstellungen. Da ein Cors Request nur die folgenden Header an den Client Exposed: Cache-Control,Content-Language,Content-Type, Expires,Last-Modified, Pragma (http://www.html5rocks.com/en/tutorials/cors/?redirect_from_locale=de) und ich den Location Header im Post Fall benötige, muss dieser noch exposed werden.
nelmio_cors:
paths:
'^/todo/api/todos':
allow_origin: ['*']
allow_headers: ['X-REQUESTED-WITH', 'Content-Type']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE', 'OPTIONS'],
# Location Header is used for POST Request Answers (URI of created Item
expose_headers: ['Location']
max_age: 3600
Problem: Same-Origin-Policy