我有以下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进行路由。是否还应该有一种运行我的应用程序的方法?还是只允许对静态内容进行域名前置?