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

首页

专栏

php

文章详情

1

网络协议-HTTP 协议(一)

110810.html爱因诗贤发布于 2020-11-19

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

1.HTTP 请求场景示意图

a33acad88738156bd9cdc4669c6b4ac8.png

79d9bf4ec7dde500e18782da2e79c344.png

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

c77b6dd5f8b1f63aad21232c2da3151a.png

3.DNS 解析流程示意图

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

3.1 DNS 解析流程示意图

869ed6c4214fc6f6a22201965da807b0.png

3.2 DNS 解析流程说明图

2c85ed609cdf1614655db08a15d0cd95.png

4.构建 HTTP 请求

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

4.1 HTTP 协议的格式示意图

efd0d007e90c51f0ff4a381d858517ca.png

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

HEXDIG

DIGIT / “A” / “B” / “C” / “D” / “E” / “F”

十六进制数字(0-9,A-F,a-f)

DQUOTE

%x22

双引号

SP

%x22

空格

HTAB

%x09

横向制表符

WSP

SP / HTAB

空格或横向制表符

LWSP

*(WSP / CRLF WSP)

直线空白

VCHAR

%x21-7E

可见(打印)字符

CHAR

%x01-7F

任何7-位 US-ASCII 字符,不包括 NUL(%x00)

OCTET

%x00-FF

8位数据

CTL

%x00-1F / %x7F

控制字符

CR

%0D

回车

LF

%x0A

换行

CRLF

CRLF

互联网标准换行

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

返回如下图所示:

8874f61ffe0f90a5c5cb36fa020dff1e.png

6.小结

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

扫码关注爱因诗贤

phphttp后端

阅读 101发布于 2020-11-19

赞1收藏

分享

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

110810.html

singwa服务端学习小组

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

关注专栏

110810.html

爱因诗贤

54声望

6粉丝

关注作者

0 条评论

得票时间

110810.html

提交评论

110810.html

爱因诗贤

54声望

6粉丝

关注作者

宣传栏

目录

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

1.HTTP 请求场景示意图

a33acad88738156bd9cdc4669c6b4ac8.png

79d9bf4ec7dde500e18782da2e79c344.png

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

c77b6dd5f8b1f63aad21232c2da3151a.png

3.DNS 解析流程示意图

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

3.1 DNS 解析流程示意图

869ed6c4214fc6f6a22201965da807b0.png

3.2 DNS 解析流程说明图

2c85ed609cdf1614655db08a15d0cd95.png

4.构建 HTTP 请求

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

4.1 HTTP 协议的格式示意图

efd0d007e90c51f0ff4a381d858517ca.png

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

HEXDIG

DIGIT / “A” / “B” / “C” / “D” / “E” / “F”

十六进制数字(0-9,A-F,a-f)

DQUOTE

%x22

双引号

SP

%x22

空格

HTAB

%x09

横向制表符

WSP

SP / HTAB

空格或横向制表符

LWSP

*(WSP / CRLF WSP)

直线空白

VCHAR

%x21-7E

可见(打印)字符

CHAR

%x01-7F

任何7-位 US-ASCII 字符,不包括 NUL(%x00)

OCTET

%x00-FF

8位数据

CTL

%x00-1F / %x7F

控制字符

CR

%0D

回车

LF

%x0A

换行

CRLF

CRLF

互联网标准换行

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

返回如下图所示:

8874f61ffe0f90a5c5cb36fa020dff1e.png

6.小结

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

扫码关注爱因诗贤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值