从 Chrome 扩展程序到 App Engine 的 POST 请求作为 GET 请求接收
Posted
技术标签:
【中文标题】从 Chrome 扩展程序到 App Engine 的 POST 请求作为 GET 请求接收【英文标题】:POST request from Chrome Extension to App Engine received as GET request 【发布时间】:2014-10-14 14:09:34 【问题描述】:我正在尝试从 Chrome 扩展程序向使用 Google App Engine 托管的服务器发送一个最小的 POST 请求。这是我的服务器代码:
class Receive(webapp2.RequestHandler):
def get(self):
logging.info('received a get')
def post(self):
logging.info('received a post')
这是我的 Chrome 扩展程序中的 javascript 代码:
$.post("http://perativ.com/receive");
$.ajax(
type: "POST",
dataType: "JSON",
url: "http://perativ.com/receive"
);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://perativ.com/receive");
xhr.send();
我的manifest.json
文件中有<all_urls>
权限。
我包含了三个相同的请求,以表明没有任何效果。当我运行这个 Chrome 扩展程序然后检查 perativ.com 上的服务器日志时,我得到三行内容:“received a get”。
感谢所有帮助,谢谢!
【问题讨论】:
【参考方案1】:正如您通过以下命令所见,对您网站的请求正在使用 HTTP 状态代码 301 从 perativ.com 重定向到 www.perativ.com。发生此重定向时,POST 将转换为 GET。
要解决此问题,请将请求发送到 www.perativ.com 而不是 perativ.com,或者在您可以访问的情况下禁用重定向。
$ curl -X POST http://perativ.com/receive -H 'Content-Length: 0'
<html><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.perativ.com/receive">here</A>.
</BODY></HTML>
【讨论】:
感谢您的回复!不幸的是,我尝试将“perativ.com/receive”的所有实例更改为“www.perativ.com/receive”,但我仍然遇到同样的问题。 @Site 替换 URL 后您是否重新加载了您的扩展程序?你刚才描述的听起来是不可能的。 啊不,就是这样!你完全正确地切换到“www”。我不知道重定向会将 POST 转换为 GET。非常感谢! 仅供参考,如果您想在保留 HTTP 方法的同时进行重定向,请使用 307 或 308 HTTP 状态代码(但不支持 308 和 307)。以上是关于从 Chrome 扩展程序到 App Engine 的 POST 请求作为 GET 请求接收的主要内容,如果未能解决你的问题,请参考以下文章
如何将 blob 从 Chrome 扩展程序传递到 Chrome 应用程序
将 Google App Engine 应用程序从 Django 0.96 迁移到 Django 1.2