【问题标题】:Chrome Extension Ajax Calls Returning 403Chrome 扩展 Ajax 调用返回 403
【发布时间】:2015-11-04 13:53:22
【问题描述】:

我开发了一个 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
] 

鉴于&lt;all_urls&gt; 的权限,我认为特定的URL 是多余的,我用http 和https 都试过了。

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

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

我得到的控制台错误是:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 同意,据我所知,没有新的身份验证信息要求。服务端脚本完全相同。
    【解决方案2】:

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

    【讨论】:

    • 我在一小时前就知道了。 Namecheap 阻止了我的 ajax 调用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多