2009-08-26 30 views
125

Mọi yêu cầu web có gửi cookie trình duyệt không?Mọi yêu cầu web có gửi cookie của trình duyệt không?

Tôi không nói lần xem trang, nhưng một yêu cầu cho một hình ảnh, .js tập tin, vv

Cập nhật Nếu một trang web có 50 yếu tố, đó là 50 yêu cầu. Tại sao nó sẽ gửi (các) cookie SAME cho mỗi yêu cầu, không phải bộ nhớ cache hoặc biết nó đã có nó?

+3

Tôi không nghĩ rằng bộ nhớ đệm có thể xảy ra trong tình huống này - chúng ta đang nói về trình duyệt gửi dữ liệu đến máy chủ chứ không phải theo cách khác. Bạn không thể nói chắc chắn rằng máy chủ "đã có nó" sau khi người dùng đã gửi một yêu cầu, vì rất nhiều lý do. Có thể có một số lượng lớn các máy chủ không nói chuyện với nhau; máy chủ có thể không muốn (hoặc có chỗ) để nhớ bất cứ điều gì về tất cả các yêu cầu trước đó - HTTP được cho là không quốc tịch; mọi yêu cầu phải độc lập với phần còn lại. Vì lý do này, các cookie, như thông tin đăng nhập xác thực, phải được gửi cùng với mọi yêu cầu. –

Trả lời

126

Có, miễn là URL được yêu cầu nằm trong cùng một tên miền và đường dẫn được xác định trong cookie (và tất cả các hạn chế khác - bảo mật, httponly, chưa hết hạn, v.v ...) sẽ được gửi cho mọi yêu cầu.

+59

Điều này, một cách ngẫu nhiên, là lý do các công cụ tốc độ trang như Tốc độ trang của Google hoặc YSlow của Yahoo khuyên bạn nên phân phát nội dung tĩnh từ một miền riêng biệt, không có cookie. – ceejayoz

+0

khi cookie được gửi, tôi có thể kiểm tra md5sum của tệp cookie đang được gửi trên máy chủ của tôi không ?? xin vui lòng trả lời tôi đang có nghi ngờ lớn trong này ?? –

10

Có. Mọi yêu cầu gửi cookie thuộc cùng một miền.

Giống như: bạn có 4 cookie tại www.stackoverflow.com. Nếu bạn yêu cầu www.stackoverflow.com/images/logo.png, nó cũng sẽ gửi các cookie.
Nhưng nếu bạn yêu cầu stackoverflow.com/images/logo.png hoặc images.stackoverflow.com/logo.png, nếu không có cookie ở đó, vì vậy sẽ không có cookie nào được gửi.

Bạn có thể đọc thêm về cookie và hình ảnh yêu cầu, ví dụ: tại StackOverflow Blog Post này.

69

Như những người khác đã nói, nếu giới hạn lưu trữ, đường dẫn, vv của cookie, nó sẽ được gửi, 50 lần.

Nhưng bạn cũng hỏi tại sao: vì cookie là một tính năng HTTP và HTTP là không trạng thái. HTTP được thiết kế để hoạt động mà không có máy chủ lưu trữ bất kỳ trạng thái nào giữa các yêu cầu.

Thực tế, máy chủ không có cách thức nhận biết người dùng nào đang gửi yêu cầu cụ thể; có thể có một nghìn người dùng đằng sau một proxy web duy nhất (và do đó địa chỉ IP). Nếu các cookie không được gửi theo yêu cầu, máy chủ sẽ không có cách nào để biết người dùng nào đang yêu cầu bất kỳ tài nguyên nào.

Cuối cùng, trình duyệt không có đầu mối nếu máy chủ cần cookie hay không, nó chỉ biết máy chủ đã hướng dẫn nó gửi cookie cho bất kỳ yêu cầu nào tới foo.com, vì vậy nó làm như vậy. Đôi khi, hình ảnh cần chúng (ví dụ: được tạo động cho mỗi người dùng), đôi khi không, nhưng trình duyệt không thể biết được.

+1

Điều này có đúng với HTTP 1.1, đây là một sơ đồ ghép kênh không? Tức là, các yêu cầu được đưa vào một kết nối TCP duy nhất. Tất nhiên mọi yêu cầu đều được nhận với một bản sao của cookie đính kèm. Nhưng nếu mối quan tâm là rất nhiều sao chép truyền, HTTP 1.1 là ở một vị trí để tối ưu hóa. Mặc dù tôi không biết liệu nó có thực sự không ... –

+1

Sau đó, vấn đề trở thành "trình duyệt nào có ý định đính kèm cookie vào?" Máy chủ đặt chính sách với cookie, để quyết định tên miền nào và đường dẫn URL nào, cookie sẽ được gửi lại, nhưng sau đó nó sẽ quên nó. Bạn sẽ cần một cách để xác định rằng một số yêu cầu nhất định trong kết nối có cookie và một số khác thì không. Điều đó chắc chắn không tồn tại trong HTTP/1.1, ngoại trừ bằng cách bao gồm rõ ràng chúng trong mọi yêu cầu. Thành thật mà nói, một giải pháp tốt hơn (tiêu chuẩn tương thích) để giảm băng thông sẽ là mã hóa nội dung gzip phía máy khách, nhưng chưa có ai hỗ trợ. –

+1

@Ian Clelland: Khách hàng phải gửi thư đầu tiên, vì vậy nó không biết máy chủ sẽ gửi cho Accept-Encoding (là các máy chủ để gửi trường đó, HTTP/1.1 §14.3 nói tiêu đề yêu cầu của nó). Và vấn đề là nó có thể thay đổi theo URL ngay cả trên cùng một máy chủ, và có thể thay đổi theo thời gian, do đó làm cho nó hoạt động sẽ không nhỏ. – derobert

3

3 năm đã trôi qua

Có một lý do tại sao một trình duyệt sẽ không gửi cookie. Một số mã có thể sử dụng thuộc tính crossOrigin của đối tượng để ẩn danh để ngăn gửi cookie.

+0

Vui lòng giải thích. – Jake

+1

@Bạn có thể thêm thuộc tính crossOrigin vào thẻ

2

Tôi biết đây là một chuỗi cũ. Nhưng tôi vừa nhận thấy rằng hầu hết các trình duyệt sẽ không gửi cookie cho miền nếu bạn thêm dấu chấm. Ví dụ: http://example.com. sẽ không nhận được cookie được đặt cho .example.com. Mặt khác, Apache xử lý chúng như cùng một máy chủ. Tôi thấy điều này hữu ích khi thực hiện theo dõi tên miền chéo khó khăn hơn đối với các tài nguyên bên ngoài mà tôi đưa vào, nhưng bạn cũng có thể sử dụng nó vì lý do hiệu suất. Lưu ý rằng việc xác thực hệ thống phanh này là https chứng chỉ. Tôi đã chạy một vài thử nghiệm bằng cách sử dụng trình duyệt và các thiết bị của riêng tôi. Tính năng hack hoạt động trên hầu hết các trình duyệt ngoại trừ safari (thiết bị di động và máy tính để bàn), bao gồm cookie trong yêu cầu.

+0

Làm cách nào để "theo dõi tên miền chéo khó khăn hơn cho các tài nguyên bên ngoài mà tôi đưa vào"? Bạn đang nói về Farcebook Like và các tiện ích như vậy - mà chúng tôi biết theo dõi duyệt của người dùng vô tình vẫn đăng nhập? – Jake

+0

Có. Nó sẽ làm cho nó khó khăn hơn, bởi vì hầu hết các trình duyệt sẽ không gửi các cookie cùng. Vì vậy, nếu bạn đang bao gồm một cái gì đó từ google.com ví dụ và bạn đang đăng nhập vào google, google không thể liên kết hai yêu cầu. Điều này không được đảm bảo khó khăn, một số trình duyệt đã gửi cookie và có ít phương pháp đáng tin cậy hơn và ít được sử dụng hơn để xác định người dùng (như Địa chỉ IP) vẫn sẽ hoạt động. Hạn chế lớn nhất là, bạn không thể sử dụng HTTPS, loại này làm cho nó vô dụng ngày nay. – Gellweiler

3

No. Không phải mọi yêu cầu đều gửi cookie. Nó phụ thuộc vào cấu hình cookie và kết nối máy khách-máy chủ.

Ví dụ: nếu tùy chọn secure của cookie được đặt thành true thì nó phải được truyền qua kết nối HTTPS an toàn. Có nghĩa là khi bạn thấy trang web đó với giao thức HTTP thì các cookie này sẽ không được gửi bởi trình duyệt vì cờ an toàn là đúng.

1

Cookie có thuộc tính "đường dẫn". Nếu "path = /", câu trả lời là Có.

+0

Có, bạn có thể biết cấu trúc trang web/ứng dụng của mình sao cho tất cả các URL yêu cầu cookie là '/ app /' hoặc tương tự - nó sẽ giữ lại tính di động mà không cần các tên miền phụ riêng biệt để loại bỏ chi phí dư thừa. Hoặc bạn có thể bỏ qua Google Analytics vô dụng ngay bây giờ để bắt đầu.Tôi đã nhìn thấy các tiêu đề cookie quá lâu, tôi tự hỏi liệu bà tôi có đan chúng không. – Jake

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