Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 如何防止App Engine合并具有相同名称的多个标题?_Google App Engine_Http Headers - Fatal编程技术网

Google app engine 如何防止App Engine合并具有相同名称的多个标题?

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之间用逗号分隔,而不是分号。

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之间用逗号分隔,而不是分号。分号用于分隔单个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)起的秒数,而不是日期时间字符串。。或者使用双引号将日期-时间字符串括起来,以便浏览器理解逗号的含义。