Chrome扩展Ajax调用返回403

时间:2015-11-04 13:53:23

标签: jquery ajax google-chrome ssl google-chrome-extension

我开发了一个Chrome扩展程序,它会截取当前标签的屏幕截图,并按计划通过ajax将其上传到服务器。它在我用来测试它的两台服务器上完美运行,但是当我转换到新服务器时,ajax调用现在产生403错误。

我能看到的唯一变化是新服务器具有SSL证书,但允许普通的http访问。此外,我有一个我一直在测试的子域,没有配置任何SSL。

我的上传脚本如下:

var xhr = new XMLHttpRequest(), formData = new FormData(); 
xhr.addEventListener("load", processSuccess);
xhr.addEventListener("error", processError);   
formData.append("img", screenshotUrl);
formData.append("auth_string", auth_string);
formData.append("site", site);
xhr.open("POST", upload_url, true);
xhr.send(formData);

在我的清单中,我有以下权限:

"permissions": [
   "activeTab",
   "tabs",
   "<all_urls>",
   "alarms",
   "storage",
   "http://**********" //the url to the script
] 

鉴于<all_urls>权限,我认为具体的网址有点过分,我尝试使用http和https。

我知道安全内容调用或引用不安全的脚本或资源存在复杂性,但我不认为使用https配置的服务器会影响任何内容。

该页面可通过浏览器访问,并具有与最后两台服务器相同的权限。

我得到的控制台错误是:

POST https://****/upload_string.php 403 (Forbidden)
(anonymous function)
target.(anonymous function)
safeCallbackApply
handleResponse

2 个答案:

答案 0 :(得分:2)

HTTP状态403表示access denied。您的新域名是否需要一些身份验证?如果是 - 传递身份验证信息。另请查看控制台以获取更多信息。

答案 1 :(得分:0)

您的服务器确实有您需要满足的安全要求,因为它已配置为在PHP上传网址上使用HTTPS。如果您拥有服务器,请进行研究(即curl)并检查配置文件以获取安全设置。在浏览器的开发工具中检查您的HTTP请求/响应数据。您很可能需要使用cookie和/或特殊标头(如Access-Control-Allow-Origin)来向安全服务器发送POST。