提供文件内容,而不是运行已发布的应用程序

时间:2018-10-26 19:27:49

标签: google-app-engine

我有以下Yaml:

runtime:   python27
api_version: 1 
threadsafe: true
handlers:
- url: /.*
  script: main.app

在main.py中,我有一个wsgi为“ /(.*)”路线提供“ Hello world”服务。

现在的问题是执行时:

curl -v -H 'Host: myapp.appspot.com' 'https://storage.googleapis.com/greetme'

即使我可以看到预期的SNI和主机,我也得到:

<?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details>Anonymous caller does not have storage.objects.get access to myapp.appspot.com/test.</Details></Error>

但是如果我对相同的请求使用邮递员或提琴手,那么我会得到实际的“ Hello World”

我试图通过查找在每种情况下发送的确切报头(但没有运气)来调试此问题。即使发送了完全相同的标头,我也遇到了同样的问题。

这种想法让我疯狂的任何想法为何使我有这种行为?

编辑: 看起来当我使用代理时,main.py正在处理我的请求 但是当我使用curl时,服务器正在尝试定位例如在给定的示例中,myapp.appspot.com上的greetme资源完全绕过了我的pythonapplicaton。我试过顺便说一句来更改用户代理,但什么也没有。仍然不确定为什么会这样。

EDIT2: 在查看了Wireshark之​​后,Fiddler将打开两个ssl连接,第一个在storage.googleapis.com上,第二个在myapp.appspot.net上。因此,myapp.appspot.net上的连接不会通过第一个会话进行路由。

因此,它可以像卷曲和提琴一样工作(但不如我所愿)。 无论如何,如果我在存储桶上创建文件test.txt并向所有用户提供读取权限,则:

curl -v -H 'Host: myapp.appspot.com' 'https://storage.googleapis.com/test.txt'

返回我的test.txt的实际内容,并通过googleapis进行路由。是否还应该有一种运行我的应用程序的方法?还是只允许对静态内容进行域名前置?

0 个答案:

没有答案