2009-02-06 34 views

Trả lời

8

Nếu bạn đang thiết kế trường mở rộng tùy chỉnh của riêng mình, bạn có thể sử dụng BASE64 hoặc được trích dẫn để in để thoát (và bỏ chọn cảnh) giá trị.

+0

+1 - có nghĩa là bạn không phải lo lắng về các ký tự bị giới hạn, mã hóa ký tự đang được sử dụng, vv Cách RFC822 gốc đóng gói những thứ này thật kinh khủng, mong manh và thường sẽ không hoạt động HTTP. – bobince

1

Nếu đó là trường tùy chỉnh cách bạn thoát, tùy thuộc hoàn toàn vào cách ứng dụng nhắm mục tiêu phân tích cú pháp đó. Nếu đây là một số phần bổ sung mà bạn đã tạo, bạn có thể gắn mã hóa URL vì nó khá cố và đúng và rất nhiều ngôn ngữ có phương thức mã hóa/giải mã được tích hợp sẵn để ứng dụng web của bạn mã hóa và cắm vào (hoặc bất kỳ thứ gì bạn đang làm việc) sẽ giải mã nó.

3

Theo RFC2616 4.2 Message Headers: -

lĩnh vực Tiêu đề có thể được kéo dài hơn nhiều dòng bằng cách đặt trước mỗi thêm phù hợp với ít nhất một SP hoặc HT.

Tôi giả sử SP nghĩa là ký tự khoảng trắng và HT nghĩa là ký tự tab cứng.

+2

Đừng mong đợi dòng mới sẽ xuất hiện trong phiên bản được phân tích cú pháp mà ứng dụng của bạn có thể nhận được; cơ chế này tồn tại trong lịch sử từ RFC822 chỉ để gấp các dòng tiêu đề dài thành 80 ký tự. – bobince

+0

@bobince, loại quy tắc hài hước này thực sự nên được cạo mặc dù. Họ làm phức tạp những thứ không có lý do thực sự tốt. – Pacerier

+1

@Pacerier: đã đồng ý, có quá nhiều nếp nhăn nhỏ mà HTTP không rõ ràng và tiêu đề được phân tích không nhất quán - sự không phù hợp trong diễn giải giữa các thành phần có thể gây ra vấn đề bảo mật. Nhưng đã quá muộn để làm bất cứ điều gì về nó bây giờ: cú pháp tiêu đề HTTP là không thể thay đổi được, tất cả chúng ta có thể hy vọng làm điều đó thay thế nó bằng một cái gì đó được xác định tốt hơn trong HTTP 2.0. – bobince

5

Ý tưởng là, HTTP là ASCII - chỉ và dòng mới và như vậy là không được phép . Nếu cả người gửi và người nhận có thể giải thích mã hóa CỦA BẠN thì bạn có thể mã hóa bất cứ điều gì bạn muốn, tuy nhiên bạn muốn. Đó là cách DNS tên quốc tế được xử lý với tiêu đề Host (được gọi là PUNYCODE).

Câu trả lời ngắn gọn là: Bạn không, trừ khi bạn kiểm soát cả người gửi và người nhận.

3

Câu trả lời thực tế cho câu hỏi này là không có tiêu chuẩn để mã hóa ngắt dòng.

Bạn có thể sử dụng bất kỳ Binary-to-text encoding chẳng hạn như Mã hóa URL hoặc Base64, nhưng rõ ràng điều đó sẽ chỉ hoạt động nếu cả người gửi và người nhận thực hiện cùng một phương pháp.


RFC 2616 đã cho phép 'gấp' giá trị (ví dụ: wrap) tiêu đề trên nhiều dòng, nhưng ngắt dòng được coi là một nhân vật không gian duy nhất và không nằm trong giá trị lĩnh vực phân tích cú pháp.

Tuy nhiên, đặc điểm kỹ thuật mà đã trở thành cũ bởi RFC 7230 mà cấm gấp:

Về mặt lịch sử, giá trị trường tiêu đề HTTP có thể được mở rộng trên nhiều dòng bằng cách đặt trước mỗi dòng thêm với ít nhất một không gian hoặc tab ngang (bị ám ảnh).
Đặc điểm kỹ thuật này không cho phép đường gấp như vậy ngoại trừ trong loại message/http loại phương tiện (Section 8.3.1).
Một người gửi PHẢI KHÔNG tạo ra một thông điệp rằng bao gồm dòng gấp

Một tiêu chuẩn cho các ngắt dòng trong giá trị trường HTTP Header không phải là - và không bao giờ được - thành lập.

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