【php】网络协议-HTTP 协议(一)

网络协议-HTTP 协议(一)

爱因诗贤发布于 2020-11-19

HTTP协议 是一种无状态的应用层的、以请求/应答方式运行的协议,它使用可拓展的语义和自描述消息格式,与基于网络的超文本信息系统灵活地互动。

1.HTTP 请求场景示意图

【php】网络协议-HTTP 协议(一)

【php】网络协议-HTTP 协议(一)

2.浏览器发起 HTTP 请求流程图

【php】网络协议-HTTP 协议(一)

3.DNS 解析流程示意图

DNS解析的目的就是把域名字符串对应的 ip地址 拿到,有了这个 ip地址 之后就可以向 ip地址对应的计算机发起通信了:

3.1 DNS 解析流程示意图

【php】网络协议-HTTP 协议(一)

3.2 DNS 解析流程说明图

【php】网络协议-HTTP 协议(一)

4.构建 HTTP 请求

上述步骤拿到 ip地址之后通过该 ip地址完成三次握手建立TCP 接连(TCP 连接的内容会在后续文章介绍),然后就可构建HTTP请求,填充上下文至HTTP头部,再发起 HTTP请求,这个时候就会涉及到 HTTP 协议的格式,下面介绍基于ABNF语言描述的HTTP协议格式

4.1 HTTP 协议的格式示意图

【php】网络协议-HTTP 协议(一)

4.2 ABNF(扩充巴科斯-瑙尔范式)操作符

  • (1)空白字符(SP):用来分隔协议定义中的各个元素

    method SP request-target SP HTTP-version CRLF

  • (2)选择(/):表示可以选择的规则

    start-line = request-line / status-line

  • (3)范围值(%c##-##)

    OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" 等价于 OCTAL = %x30-37

  • (4)序列组合(( )):把规则组合起来作为单个元

  • (5)不定量重复(m*n):

    *表示 0 个或多个元素:*(header-field CRLF)

    1*表示 1 个或多个元素:2*4 表示 2-4 个元素

  • (6)可选序列([]):

    [message-body]

4.3 ABNF(扩充巴科斯-瑙尔范式)规则表

下面列举出 ABNF 描述的字符规则及含义:

下面列举出 ABNF 描述的字符规则及含义:

规则定义形式含义
ALPHA%x41-5A / %x61-71大写和小写字母(A-Z,a-z) ASSCII
DIGIT%x30-39数字0-9
HEXDIGDIGIT / "A" / "B" / "C" / "D" / "E" / "F"十六进制数字(0-9,A-F,a-f)
DQUOTE%x22双引号
SP%x22空格
HTAB%x09横向制表符
WSPSP / HTAB空格或横向制表符
LWSP*(WSP / CRLF WSP)直线空白
VCHAR%x21-7E可见(打印)字符
CHAR%x01-7F任何7-位 US-ASCII 字符,不包括 NUL(%x00)
OCTET%x00-FF8位数据
CTL%x00-1F / %x7F控制字符
CR%0D回车
LF%x0A换行
CRLFCRLF互联网标准换行
BIT"0" / "1"二进制数字

4.4 基于 ABNF 描述的 HTTP 协议格式

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

start-line = request-line / status-line

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

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

header-field = field-name ":" OWS field-value OWS

OWS = *(SP / HTAB)

field-name = token

field-value = *(field-content / obs-fold)

message-body = *OCTET

5.Telnet 模拟 HTTP 请求

telnet singwa666.com 80

GET /themes/simpleboot3/portal/public/assets/css/moco.css HTTP/1.1

Host: singwa666.com

返回如下图所示:
【php】网络协议-HTTP 协议(一)

6.小结

本文主要介绍了 HTTP 请求的过程,然后对 DNS 域名解析做了详细的描述,DNS 解析拿到 ip 地址之后就可以完成经典的 TCP/IP 握手,然后就可以发起 HTTP 请求了,文中还对 HTTP 请求的格式规范做了介绍,HTTP 协议规范是基于 ANBF 语言的一种严格定义,最后介绍了如何试用 telnet 工具模拟 HTTP 请求过程。

扫码关注爱因诗贤

【php】网络协议-HTTP 协议(一)

phphttp后端

阅读 101发布于 2020-11-19

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


singwa服务端学习小组

singwa服务端学习小组技术共享平台

avatar

爱因诗贤

54 声望

6 粉丝

0 条评论

得票时间

avatar

爱因诗贤

54 声望

6 粉丝

宣传栏

​HTTP协议 是一种无状态的应用层的、以请求/应答方式运行的协议,它使用可拓展的语义和自描述消息格式,与基于网络的超文本信息系统灵活地互动。

1.HTTP 请求场景示意图

【php】网络协议-HTTP 协议(一)

【php】网络协议-HTTP 协议(一)

2.浏览器发起 HTTP 请求流程图

【php】网络协议-HTTP 协议(一)

3.DNS 解析流程示意图

DNS解析的目的就是把域名字符串对应的 ip地址 拿到,有了这个 ip地址 之后就可以向 ip地址对应的计算机发起通信了:

3.1 DNS 解析流程示意图

【php】网络协议-HTTP 协议(一)

3.2 DNS 解析流程说明图

【php】网络协议-HTTP 协议(一)

4.构建 HTTP 请求

上述步骤拿到 ip地址之后通过该 ip地址完成三次握手建立TCP 接连(TCP 连接的内容会在后续文章介绍),然后就可构建HTTP请求,填充上下文至HTTP头部,再发起 HTTP请求,这个时候就会涉及到 HTTP 协议的格式,下面介绍基于ABNF语言描述的HTTP协议格式

4.1 HTTP 协议的格式示意图

【php】网络协议-HTTP 协议(一)

4.2 ABNF(扩充巴科斯-瑙尔范式)操作符

  • (1)空白字符(SP):用来分隔协议定义中的各个元素

    method SP request-target SP HTTP-version CRLF

  • (2)选择(/):表示可以选择的规则

    start-line = request-line / status-line

  • (3)范围值(%c##-##)

    OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" 等价于 OCTAL = %x30-37

  • (4)序列组合(( )):把规则组合起来作为单个元

  • (5)不定量重复(m*n):

    *表示 0 个或多个元素:*(header-field CRLF)

    1*表示 1 个或多个元素:2*4 表示 2-4 个元素

  • (6)可选序列([]):

    [message-body]

4.3 ABNF(扩充巴科斯-瑙尔范式)规则表

下面列举出 ABNF 描述的字符规则及含义:

下面列举出 ABNF 描述的字符规则及含义:

规则定义形式含义
ALPHA%x41-5A / %x61-71大写和小写字母(A-Z,a-z) ASSCII
DIGIT%x30-39数字0-9
HEXDIGDIGIT / "A" / "B" / "C" / "D" / "E" / "F"十六进制数字(0-9,A-F,a-f)
DQUOTE%x22双引号
SP%x22空格
HTAB%x09横向制表符
WSPSP / HTAB空格或横向制表符
LWSP*(WSP / CRLF WSP)直线空白
VCHAR%x21-7E可见(打印)字符
CHAR%x01-7F任何7-位 US-ASCII 字符,不包括 NUL(%x00)
OCTET%x00-FF8位数据
CTL%x00-1F / %x7F控制字符
CR%0D回车
LF%x0A换行
CRLFCRLF互联网标准换行
BIT"0" / "1"二进制数字

4.4 基于 ABNF 描述的 HTTP 协议格式

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

start-line = request-line / status-line

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

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

header-field = field-name ":" OWS field-value OWS

OWS = *(SP / HTAB)

field-name = token

field-value = *(field-content / obs-fold)

message-body = *OCTET

5.Telnet 模拟 HTTP 请求

telnet singwa666.com 80

GET /themes/simpleboot3/portal/public/assets/css/moco.css HTTP/1.1

Host: singwa666.com

返回如下图所示:
【php】网络协议-HTTP 协议(一)

6.小结

本文主要介绍了 HTTP 请求的过程,然后对 DNS 域名解析做了详细的描述,DNS 解析拿到 ip 地址之后就可以完成经典的 TCP/IP 握手,然后就可以发起 HTTP 请求了,文中还对 HTTP 请求的格式规范做了介绍,HTTP 协议规范是基于 ANBF 语言的一种严格定义,最后介绍了如何试用 telnet 工具模拟 HTTP 请求过程。

扫码关注爱因诗贤

【php】网络协议-HTTP 协议(一)

以上是 【php】网络协议-HTTP 协议(一) 的全部内容, 来源链接: utcz.com/a/110810.html

回到顶部