HTTP/1.1之消息

4.1 消息类型

消息的类型分为:请求消息和响应消息。 HTTP-message = Request | Response ; HTTP/1.1 messages,任何类型的消息都是由开始行,0个或是多个头域,一个空行(CRLF)用来终止头信息,消息实体(也可能没有)。

generic-message =      start-line
                          *(message-header CRLF)
                          CRLF
                          [ message-body ]
        start-line      = Request-Line | Status-Line
一个服务器在处理请求的时候,应该能够自动的过滤CRLF这样的空行。
一般一个存在问题的HTTP/1.0的客户端会在POST请求后,添加额外的CRLF,一个HTTP/1.1客户端不应该在请求前和请求后添加不必要的CRLF
4.2消息头
消息头有常用头、请求头、响应头和消息头几种。每一个头域由头名 :值域 组成,头的名不区分大小写的。
message-header = field-name ":" [ field-value ]
       field-name     = token
       field-value    = *( field-content | LWS )
       field-content  = <the OCTETs making up the field-value
                        and consisting of either *TEXT or combinations
                        of token, separators, and quoted-string>
头域的顺序是不强制要求的,但是最好是按照:常用头域、请求|响应头域,实体头域。
4.3 消息主体
通常,消息主体和实体是等价的,除非头域指定了 transfer-coding,对于响应消息,有没有消息实体是由请求方法和响应状态来决定的。HEAD请求不应该包含任何消息主体
哪怕是消息头域。另外,所有1XX,202(无内容),304(没有修改)的状态,都不能包含消息主体。其他任何情况都必须要包含消息主体,哪怕长度为0.
4.4 消息长度
当消息主体出现在消息中时候,一条信息的传输长度就是信息主体的长度,他由以下条件决定:
1.任何不包含消息主体的消息总是被头域得第一个空行CRLF终止。
2.如果Transfer-Encoding头域(见14.41节)出现,并且它的域值是非”“dentity”传输编码值,那么传输长度(transfer-length)被“块”(chunked)传输编码定义,除非消息因为通过
关闭连接而结束。
3.。如果出现Content-Length头域(属于实体头域)(见14.13节),那么它的十进制值(以字节表示)即代表实体主体长度(entity-length)。如果一个消息即存在传输译
码(Transfer-Encoding)头域并且也Content-Length头域,后者会被忽略。
4.如果消息用到媒体类型“multipart/byteranges”,并且传输长度(transfer-length)另外也没有指定,那么这种自我定界的媒体类型定义了传输长度(transfer-length)。
5.。通过服务器关闭连接能确定消息的传输长度。(请求端不能通过关闭连接来指明请求消息体的结束,因为这样可以让服务器没有机会继续给予响应)。
4.5 常用头域
有一些头域即适用于请求消息也适用于响应消息,但是这些头域并不适合传输实体。这些头域只能应用于传输消息


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注