Google app engine 如何防止App Engine合并具有相同名称的多个标题?
appengine似乎总是将多个同名标题合并为一个标题。例如,如果在CGI中设置此项Google app engine 如何防止App Engine合并具有相同名称的多个标题?,google-app-engine,http-headers,Google App Engine,Http Headers,appengine似乎总是将多个同名标题合并为一个标题。例如,如果在CGI中设置此项 print "Set-Cookie: foo=bar" print "Set-Cookie: spam=egg" 实际交付到浏览器的是 Set-Cookie: foo=bar, spam=egg 这当然是错误的。正确的解决方案是 Set-Cookie: foo=bar; spam=egg 或者根本不合并它们。我该怎么做?谢谢 事实上,我相信GAE在做正确的事情。多个cookie之间用逗号分隔,而不是分号。
print "Set-Cookie: foo=bar"
print "Set-Cookie: spam=egg"
实际交付到浏览器的是
Set-Cookie: foo=bar, spam=egg
这当然是错误的。正确的解决方案是
Set-Cookie: foo=bar; spam=egg
或者根本不合并它们。我该怎么做?谢谢 事实上,我相信GAE在做正确的事情。多个cookie之间用逗号分隔,而不是分号。分号用于分隔单个cookie的参数。我没有时间查找RFC链接,但您可以在互联网上看到示例: 代码
import httplib
c = httplib.HTTPConnection("www.facebook.com")
myHeaders = {
'Content-Type': 'text/html',
'User-agent':
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12",
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Keep-Alive': '300',
'Connection': 'keep-alive',
'Accept-Language': 'en-us,en;q=0.5',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
}
c.request("GET", "/login.php", body="", headers=myHeaders)
r = c.getresponse()
print r.getheaders()
结果
[…其他标题被剪掉了
('set-cookie','datr=5j9DTSaOPEd5Rxc9X23IB7KB;expires=Sun,2013年1月27日22:15:02 GMT;path=/;domain=.facebook.com;httponly,lsd=0l0sd;path=/;domain=.facebook.com,reg_fb_gate=http%3A%2Fwww.facebook.com%2Flogin.php;path=/;domain=.facebook.com,regu fb_=http%2Fwww.facebook.com%2Fwww.facebook.com;path=.facebook.com
]
希望这是有帮助的
Ian这是在SDK中还是在产品中?在SDK和Appspot中都会发生。我检查了RFC,令人惊讶的是,它确实像您描述的那样:用逗号分隔多个cookie,用分号分隔多个参数。我最初的问题使用了一些材料,这完全是错误的。同时,我认为逗号有很大的问题:请看您提供的示例中的“expires=Sun,27-Jan-2013”部分。这是一个很好的搞糟事情的方法。事实上,expires param中的逗号是一个令人厌恶的来源。对于旧式的“Netscape”Cookie,多个Cookie作为多个“Set Cookie”头传入,没有问题。然后有人提出了这样一个想法,cookies可以全部出现在同一个报头上,在这种情况下,服务器应该使用自历元时间戳(如1174098190.796)起的秒数,而不是日期时间字符串。。或者使用双引号将日期-时间字符串括起来,以便浏览器理解逗号的含义。