我正在Google App Engine上测试应用程序。
我将Flexible环境与自定义python运行时一起使用。
在我的应用程序中,我需要在HTTP请求上使用“session.id”标头。
我的Web应用程序代码提取session.id的值并验证它,如果它无效或缺少Web应用程序返回HTTP 401。
当我使用curl
向我的GAE网络应用程序发出HTTP POST并设置标题时,例如:
curl -v -X POST --data "echo" -H "session.id: someweirdandlargestring" https://*****.appspot.com/echo
似乎GAE代理删除了“session.id”标题,然后Web应用程序返回401.如果我发送“session.id”作为Cookie一切正常,服务器返回200.我调试了应用程序标题未到达Web应用程序。
我已经阅读了文档(https://cloud.google.com/appengine/docs/flexible/python/how-requests-are-handled),并且它们描述了在请求到达我们的实际服务器之前预期会被删除或添加的标头。但他们说:
出于安全考虑,某些标题在到达应用程序之前由中间代理进行清理或修改。
是什么让我相信GAE正在删除我设置的HTTP标头。
我的问题:
这是GAE的预期行为吗?
你有什么建议解决它?换句话说:如何使我的标题条目到达Web服务器应用程序代码?
请注意,短期内不能使用Cookie。
答案 0 :(得分:0)
正如@viz建议我测试了没有点的标题名称。它有效。
如果我使用,请说" sessionid",然后标题到达服务器。
GAE网络服务器正在丢弃格式错误的http标头。 我发现有关HTTP标头约定的最佳信息是NGINX文档http://nginx.org/en/docs/http/ngx_http_core_module.html#ignore_invalid_headers:
有效名称由英文字母,数字,连字符和可能的下划线组成