2013-04-29 40 views
8

Tôi đã tự tạo ra hai tập tin cookie sử dụng firebug:Tại sao trình duyệt web không quan tâm đến số cổng khi gửi cookie?

Cookie1=value1; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost; HttpOnly 
Cookie2=value2; expires=Sat, 29 Mar 2014 06:21:54 GMT; path=/Ex05Cookie; domain=localhost:8080; HttpOnly 

Sự khác biệt duy nhất là các thuộc tính miền, một là localhost trong khi người kia có một số cổng.

Đây là tiêu đề HTTP khi tôi cố gắng để yêu cầu http://localhost:8080/Ex05Cookie/:

GET /Ex05Cookie/ HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Cookie: Cookie1=value1 
Connection: keep-alive 
Cache-Control: max-age=0 

nơi header chỉ chứa Cookie1 có tên miền là localhost.

Tại sao firefox của tôi không gửi Cookie2 thay vì Cookie1?

+0

Tôi đoán đó là vấn đề "cùng miền" với cơ chế HTTP, nơi trình duyệt sẽ không phân biệt các đường dẫn và/hoặc cổng khác nhau để sử dụng các cookie khác nhau trong cùng một tên miền. –

+0

nhưng điều này có thể gây ra sự cố, vì các máy chủ khác nhau chạy trên các cổng khác nhau và cookie được tạo bởi máy chủ httpd (cổng 80) không được gửi tới Tomcat (cổng 8080). –

+0

Rất đúng; Tôi cũng quan tâm đến những người sẽ biết một giải pháp cho việc này. –

Trả lời

5

này được trả lời bằng cách https://stackoverflow.com/a/4212964/14731 và bởi tác giả của RFC 6265:

Nếu chúng ta bắt đầu thiết kế cookie ngày hôm nay, chúng tôi chắc chắn sẽ làm cho nó mỗi cổng. Tuy nhiên, các cookie được sử dụng rộng rãi trên Internet ngày nay và làm cho loại thay đổi này sẽ phá vỡ quá nhiều trang web. Đối với hầu hết các phần, cookie được "thực hiện" theo nghĩa là tôi sẽ không mong đợi họ thay đổi nhiều. Thật không may, điều đó có nghĩa là chúng tôi bị kẹt với cookie không tôn trọng số cổng.

Nguồn: https://groups.google.com/d/msg/comp.infosystems.www.misc/6WXdQ2RFhG8/VvOUuR3FNAUJ

0

cookie cổng không phải được thiết lập trên tên miền (như trong "domain = foobar.com: 8443" sai) nhưng như một cookie riêng 'cổng' param (như trong "domain = foobar.com; port = 8443")

Các vấn đề liên quan