HTTP协议是一种无状态的、应用层协议,运行在请求/响应模式。它使用可扩展的语义和自描述的文本信息系统进行灵活的交互。1.HTTP请求场景示意图2.浏览器发起HTTP请求流程图3.DNS解析过程示意图DNS解析的目的是得到域名字符串对应的ip地址。计算机发起通信:3.1DNS解析过程示意图3.2DNS解析过程描述图4.构造HTTP请求通过以上步骤得到ip地址后,完成三次握手,通过ip地址建立TCP连接(TCP的内容connection会在后续的文章中介绍),然后就可以构建HTTP请求,将context填入HTTP头,然后发起HTTP请求。这时候就会涉及到HTTP协议的格式。下面根据ABNF语言的描述介绍HTTP协议的格式:4.1HTTP协议格式示意图提示:说明图中的HTTP格式需要严格规范。通常,HTTP协议是严格基于ABNF语言定义的。4.2ABNF(AmplifiedBackus-NaurForm)运算符(1)空白符(SP):用于分隔协议定义方法中的各个元素SPrequest-targetSPHTTP-versionCRLF(2)选择(/):表示可选规则开始-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-fieldCRLF)1*表示1个或多个元素:2*4表示2-4个元素(6)可选序列([]):[message-body]4.3ABNF(AdvancedBackus-NaurForm)规则表如下列出ABNF描述的字符规则和含义:下面列出ABNF描述的字符规则和含义:规则定义形式含义ALPHA%x41-5A/%x61-71大小写字母(A-Z,a-z)ASSCIIDIGIT%x30-39数字0-9HEXDIGDIGIT/"A"/"B"/"C"/"D"/"E"/"F"十六进制数字(0-9,A-F,a-f)DQUOTE%x22双引号SP%x22空格HTAB%x09水平制表符WSPSP/HTAB空格或水平制表符LWSP*(WSP/CRLFWSP)直空白VCHAR%x21-7E可见(打印)字符CHAR%x01-7F任何7位US-ASCII字符,不包括NUL(%x00)OCTET%x00-FF8位数据CTL%x00-1F/%x7F控制字符CR%0D回车LF%x0A换行符CRLFCRLFInternetstandardNewlineBIT"0"/"1"binarynumber4.4基于ABNF描述的HTTP协议格式HTTP-message=start-line*(header-fieldCRLF)CRLF[message-body]start-line=request-line/状态行请求行=方法SPrequest-targetSPHTTP-versionCRLFstatus-line=HTTP-versionSPstatus-codeSPreason-phraseCRLFheader-field=field-name":"OWSfield-valueOWSOWS=*(SP/HTAB)字段名=tokenfield-value=*(field-content/obs-fold)message-body=*OCTET5.Telnet模拟HTTP请求telnetsingwa666.com80GET/themes/simpleboot3/portal/public/assets/css/moco.cssHTTP/1.1Host:singwa666.com返回如下图:提示:先输入telnetsingwa666.com80然后会提示与49.234.12.156连接成功,然后提示输入内容,然后输入GET/themes/simpleboot3/portal/public/assets/css/moco.cssHTTP/1.1andHost:singwa666.com回车两次,可以看到请求数据和返回数据都遵循ABNF规范6.总结本文主要介绍流程的HTTP请求,然后做DNS域名解析详解,DNS解析得到ip地址后,经典的TCP/IP握手就可以completed,然后就可以发起HTTP请求了。文章还介绍了HTTP请求的格式规范。HTTP协议规范基于ANBF语言。严格定义,最后介绍如何试用telnet工具来模拟HTTP请求过程。扫描二维码关注爱因世贤
