其他分享
首页 > 其他分享> > RFC 7230 HTTP消息语法及路由

RFC 7230 HTTP消息语法及路由

作者:互联网

HTTP是一个无状态的请求、响应协议,通过一个可靠的传输连接来交换信息。一个Http客户端是一个用来和服务端进行连接的程序,主要是用来发送一个或多个http请求;服务端是用来接受请求连接,响应请求并返回结果

URI 统一资源定位符

URI(Uniform Resource Identifier)统一资源定位符,在http里面用来识别资源,对应的标准文件是[RFC3986]

通用的URI格式定义如下

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part  = "//" authority path-abempty
            / path-absolute
            / path-rootless
            / path-empty

其中scheme和path是必须的,尽管path可能为空。当authority存在时,path必须为空或者以/开头。当authority不存在时,path不能为//开关

scheme = ALPHA *( ALPHA / DIGIT / “+” / “-” / “.” )

authority = [ userinfo “@” ] host [ “:” port ]

  path          = path-abempty    ; begins with "/" or is empty
                / path-absolute   ; begins with "/" but not "//"
                / path-noscheme   ; begins with a non-colon segment
                / path-rootless   ; begins with a segment
                / path-empty      ; zero characters

query = *( pchar / “/” / “?” )

fragment = *( pchar / “/” / “?” )

下面是一个具体的实例

         foo://example.com:8042/over/there?name=ferret#nose
         \_/   \______________/\_________/ \_________/ \__/
          |           |            |            |        |
       scheme     authority       path        query   fragment
          |   _____________________|__
         / \ /                        \
         urn:example:animal:ferret:nose

Message Format 消息格式

所有HTTP/1.1 消息由一个起始行+0或多个head字段+空行+可选的消息body

HTTP 消息格式如下

        HTTP-message   = start-line
                      *( header-field CRLF )
                      CRLF
                      [ message-body ]
start line 起始行

起始行分2类:请求行和状态行

request-line 请求行

一个请求行由3部分组成

这3个部分使用空格(space)来,最后用CRLF换行表示结束。

格式如下:

request-line = method SP request-target SP HTTP-version CRLF

示例:
在这里插入图片描述

status-line 状态行

一个状态行(表示服务器响应ruddy)由3部分组成

和请求行类似,这3个部分使用空格(space)来,最后用CRLF换行表示结束。

格式如下:

status-line = HTTP-version SP status-code SP reason-phrase CRLF

其中状态值由3位数字组成

status-code = 3DIGIT

在这里插入图片描述

Header Fields 头字段

头部字段是key-value的形式,Key和value之间用:分隔,最后用CRLF换行表示结束,不区分大小写

头字段非常灵活,除了可以使用标准的host/connection等字段,也可以任意添加自定义头,给http协议提供了扩展可能

字段的顺序是没有意义的,可以任意排列,不影响语义

在一个HTTP/1.1请求中,请求头里面必须包含有host字段,如果没有,就是一个错误的消息。 A client MUST send a Host header field in all HTTP/1.1 request
messages

在这里插入图片描述
常见的请求头和响应头如下
在这里插入图片描述
在这里插入图片描述

Message Body 消息体

消息体是可选的,从前面的定义可以知道,head之后,有一个空行,再然后才是消息body

Message 路由

标签:HTTP,请求,authority,RFC,CRLF,7230,path,line
来源: https://blog.csdn.net/weixin_42695485/article/details/118425007