【发布时间】:2013-07-02 08:52:35
【问题描述】:
我有一个带有 REST Api 的网站,现在我正在创建一个浏览器扩展程序,它将从一些页面收集数据并将它们发送回 REST Api。因为我希望我的扩展与 firefox 和 chrome 兼容,并且易于维护,所以我将实际代码作为脚本标记注入页面,然后像普通 javascript 一样执行。 我目前只使用 chrome 版本的扩展程序,但遇到了问题:
当我尝试将数据发送到 api(PATCH 请求)时,chrome 不会让我说:
XMLHttpRequest 无法加载 http://my.rest/api。 Access-Control-Allow-Origin 不允许来源http://website.com。
我将 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 标头完全相同的值,但它不起作用。此外,它似乎在 Firefox 中工作。我有 Chrome 27,应该是最新的。
【问题讨论】:
标签: javascript google-chrome cross-domain