我开发了一个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
答案 0 :(得分:2)
HTTP状态403
表示access denied
。您的新域名是否需要一些身份验证?如果是 - 传递身份验证信息。另请查看控制台以获取更多信息。
答案 1 :(得分:0)
您的服务器确实有您需要满足的安全要求,因为它已配置为在PHP上传网址上使用HTTPS。如果您拥有服务器,请进行研究(即curl)并检查配置文件以获取安全设置。在浏览器的开发工具中检查您的HTTP请求/响应数据。您很可能需要使用cookie和/或特殊标头(如Access-Control-Allow-Origin)来向安全服务器发送POST。