2009-05-03 34 views
23

Khi trình duyệt gửi yêu cầu HTTP đến máy chủ web, mã hóa nào được sử dụng để mã hóa giao thức HTTP trên dây? Nó là ASCII? UTF8? hoặc UTF16? Hay nó chỉ định mã hóa nó sử dụng trong một định dạng được xác định trước (trước khi bất kỳ giải mã nào diễn ra?)Mã hóa nào được giao thức HTTP sử dụng?

P.S Tôi không hỏi về tải trọng thực tế (ví dụ: HTML) của yêu cầu/phản hồi. Tôi đang hỏi về dòng yêu cầu (ví dụ GET /index.html HTTP/1.1) và tiêu đề (ví dụ Host: google.com)

Trả lời

7

RFC 2616 bao gồm này:

OCTET   = <any 8-bit sequence of data> 
CHAR   = <any US-ASCII character (octets 0 - 127)> 
UPALPHA  = <any US-ASCII uppercase letter "A".."Z"> 
LOALPHA  = <any US-ASCII lowercase letter "a".."z"> 
ALPHA   = UPALPHA | LOALPHA 
DIGIT   = <any US-ASCII digit "0".."9"> 
CTL   = <any US-ASCII control character 
        (octets 0 - 31) and DEL (127)> 
CR    = <US-ASCII CR, carriage return (13)> 
LF    = <US-ASCII LF, linefeed (10)> 
SP    = <US-ASCII SP, space (32)> 
HT    = <US-ASCII HT, horizontal-tab (9)> 
<">   = <US-ASCII double-quote mark (34)> 

Và sau đó khá nhiều mọi thứ khác trong tài liệu được quy định tại các điều khoản của các đơn vị (OCTET, CHAR, v.v.). Vì vậy, bạn có thể xem qua RFC để tìm hiểu các phần của yêu cầu/phản hồi HTTP có thể bao gồm OCTET s; tất cả các phần khác phải là ASCII. (Tôi tự làm, nhưng phải mất một thời gian dài)

Đối với dòng yêu cầu cụ thể, tên phương thức và phiên bản HTTP sẽ chỉ là ký tự ASCII, nhưng có thể chính URL đó có thể bao gồm ký tự không phải ASCII. Nhưng nếu bạn nhìn vào RFC 2396, điều đó nói rằng.

URI là chuỗi các ký tự từ một tập hợp rất hạn chế, tức là các chữ cái của chữ cái Latinh cơ bản, chữ số và một vài ký tự đặc biệt.

Điều tôi đoán có nghĩa là nó cũng sẽ bao gồm các ký tự ASCII.

20

HTTP 1.1 sử dụng US-ASCII như nhân vật cơ bản đặt ra cho request line trong các yêu cầu, các status line trong phản ứng (trừ reason phrase) và field names nhưng cho phép bất kỳ octet trong giá trị trường và message body.

+2

Tôi biết chúng ta nên ** mong đợi ** một cụm từ lý do, nhưng bạn có nghĩa là nó cũng là ** ngoại trừ ** - ion không? ;-) – Lucius

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