У меня есть сайт с REST Api, и теперь я создаю расширение для браузера, которое будет собирать данные с некоторых страниц и отправлять их обратно в REST Api. Поскольку я хочу, чтобы мое расширение было совместимо с firefox и chrome, и чтобы быть легко поддерживаемым, я вставляю фактический код на страницу в качестве тега script, который затем выполняется как обычный javascript. В настоящее время я работаю только с хромированной версией расширения, и я столкнулся с проблемой:
Когда я пытаюсь отправить свои данные в api (запрос PATCH), хром не позволит мне сказать:
XMLHttpRequest не может загрузить http://my.rest/api. Происхождение http://website.com не разрешено Access-Control-Allow-Origin.
У меня есть Access-Control-Allow-Headers, Methods и Origin, все настроены на правильные значения, но он все еще не работает. Однако он работает с запросами GET. Я также пробовал запрос POST и PUT, но они тоже не работают.
Вот мои заголовки:
Запрос:
OPTIONS /some/api/path HTTP/1.1
Host: my.rest
Connection: keep-alive
Access-Control-Request-Method: PATCH
Origin: http://website.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
X-FireLogger: 1.1
Access-Control-Request-Headers: accept, x-http-auth-user, x-http-auth-token, origin, content-type
Accept: */*
Referer: http://website.com/index.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: cs-CZ,cs;q=0.8
Ответ:
Access-Control-Allow-Headers:accept, x-http-auth-user, x-http-auth-token, origin, content-type
Access-Control-Allow-Methods:PATCH
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Type:text/html; charset=utf-8
Date:Thu, 04 Jul 2013 10:50:08 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.2 (Win64) PHP/5.4.3
X-Frame-Options:SAMEORIGIN
X-Powered-By:Nette Framework
Я также попытался настроить Access-Control-Allow-Origin на то же значение, что и заголовок Origin, но он не работал. Furthemore, похоже, работает в Firefox. У меня Chrome 27, который должен быть обновлен.