hyn*_*ner 13 javascript google-chrome cross-domain
我有一个REST Api的网站,现在我正在创建一个浏览器扩展,它将从一些页面收集数据并将它们发送回REST Api.因为我希望我的扩展程序兼容firefox和chrome,并且易于维护,我将实际代码作为脚本标记注入页面,然后像普通的javascript一样执行.我目前只在扩展的chrome版本上工作,我遇到了一个问题:
当我尝试将数据发送到api(PATCH请求)时,chrome不会让我说:
XMLHttpRequest无法加载http://my.rest/api.Access-Control-Allow-Origin不允许使用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
Run Code Online (Sandbox Code Playgroud)
响应:
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
Run Code Online (Sandbox Code Playgroud)
我也尝试将Access-Control-Allow-Origin设置为与Origin标题完全相同的值,但它不起作用.此外,它似乎在Firefox中工作.我有Chrome 27,应该是最新的.
我在带有cors的node.js中面临类似的问题
您需要将"Access-Control-Allow-Origin"设置为特定域而不是通配符
示例:'Access-Control-Allow-Origin'为' http://website.com '
(你可以在你的服务器上拥有一个允许的来源数组,如果允许则检查请求,然后用那个而不是通配符回答)
您还可以将"Access-Control-Allow-Methods"标题设置为以下选项列表:
'POST,GET,OPTIONS,DELETE,PUT'