-
-
Notifications
You must be signed in to change notification settings - Fork 9.5k
Closed
Milestone
Description
Hey,
I found that requests (version 2.6.0) violates one paragraph of rfc6265 - http://tools.ietf.org/html/rfc6265#section-4.1.2.3
"If the server omits the Domain attribute, the user agent will return the cookie only to the origin server."
It means that if Set-Cookie is set without domain at test.com, the cookie shouldn't be visible at subdomain.test.com.
However, the RFC warns that some user agents behave that way. Have this been discussed before? I haven't found anything. I encountered that issue when I was requesting endpoint which sent me 301 to subdomain of the initial endpoint. The service didn't handle that properly.
Below the code that shows the issue.
"""
Use twoliner to add hosts to /etc/hosts
echo "127.0.0.1 test.com
127.0.0.1 subdomain.test.com" | sudo tee -a /etc/hosts
"""
import BaseHTTPServer
import requests
import threading
# http server
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
l = self.headers.get('Host').lower()
print "Server: processing {}".format(l)
if l == 'test.com:8000':
self.send_response(301)
self.send_header('Set-Cookie', 'Test=True')
self.send_header('Location', 'http://subdomain.test.com:8000')
elif l == 'subdomain.test.com:8000':
print "---> Cookie: {} <---".format(self.headers.get('Cookie'))
self.send_response(200)
else:
assert False, "Not supported"
httpd = BaseHTTPServer.HTTPServer(('', 8000), RequestHandler)
def server_callback():
while True:
httpd.handle_request()
server_thread = threading.Thread(target=server_callback)
server_thread.daemon = True
server_thread.start()
# http client
requests.get('http://test.com:8000')
The code outputs
Server: processing test.com:8000
127.0.0.1 - - [28/Apr/2015 23:47:55] "GET / HTTP/1.1" 301 -
Server: processing subdomain.test.com:8000
---> Cookie: Test=True <---
127.0.0.1 - - [28/Apr/2015 23:47:55] "GET / HTTP/1.1" 200 -
Metadata
Metadata
Assignees
Labels
No labels