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

1.HTTP 请求场景示意图

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

3.DNS 解析流程示意图

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

3.1 DNS 解析流程示意图

3.2 DNS 解析流程说明图

4.构建 HTTP 请求

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

4.1 HTTP 协议的格式示意图

Tips:描述图中的 HTTP 格式就需要制定一种严格的规范,通常 HTTP 协议是基于 ABNF 语言来严格定义。

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 描述的字符规则及含义:

规则 定义形式 含义
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 CRLFstatus-line = HTTP-version SP status-code SP reason-phrase CRLF    header-field = field-name ":" OWS field-value OWS       OWS = *(SP / HTAB)field-name = tokenfield-value = *(field-content / obs-fold)    message-body = *OCTET

5.Telnet 模拟 HTTP 请求

telnet singwa666.com 80GET /themes/simpleboot3/portal/public/assets/css/moco.css HTTP/1.1Host: singwa666.com

返回如下图所示:

Tips:首先输入 telnet singwa666.com 80 之后会提示和 49.234.12.156 连接成功,然后提示输入内容,接下来输入 GET /themes/simpleboot3/portal/public/assets/css/moco.css HTTP/1.1Host: singwa666.com 两次回车,可以看到请求数据和返回数据都遵循 ABNF 规范。

6.小结

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

扫码关注爱因诗贤

android rtsp协议转http协议_网络协议HTTP 协议(一)相关推荐

  1. arp协议属于哪一层_网络工程师(3):详解ARP协议

    提起"协议",我们并不陌生,比如实习协议.租赁协议,等等. 所以,协议,其实就是双方或几方协商一致,需要共同遵守的约定. 网络中各种各样的协议,就是人们为了让电脑或网络设备(比如交 ...

  2. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴

    这篇文章介绍一下两个时钟同步的网络协议:NTP和PTP. 这里不涉及协议的原理和具体实现(想了解的可自行Google),重点是如何搭建起这两个服务. 1. NTP及PTP简介 NTP(Network ...

  3. Linux的网络协议族是什么,Linux 网络协议的概述

    网络层协议 网络层协议主要包括 IP.ICMP(网络控制报文协议).ARP(地址解析协议) IP协议 该协议被设计成互联分组交换通信网,以形成一个网际通信环境.它负责在源主机和目的地主机之间传输来自其 ...

  4. 智能终端会议系统(20)---网络视频传输协议--RTP/RTCP/RTSP/SIP/SDP 之间关系

    网络视频传输协议--RTP/RTCP/RTSP/SIP/SDP 之间关系 RTP/RTCP/RTSP/SIP/SDP 关系 1. RTP Real-time Transport Protocol,是用 ...

  5. 网络编程_HTTP协议_Web服务器_(TCP3次握手4次挥手,长短连接,伪静态、静态和动态)

    Python高级语法--网络编程--进阶学习笔记 文中案例参考: https://github.com/FangbaiZhang/Python_advanced_learning/tree/maste ...

  6. 判断设备网络状态_生成树RSTP,快速生成树协议,交换网络必用的破环协议,面试必备...

    一.RSTP 802.1w 标准定义了快速生成树协议 RSTP(Rapid Spanning Tree Protocol),该协议基于 STP 协议,对原有的 STP 协议进行了改进并实现了快速收敛. ...

  7. 3 v4 中心节点固定_科研人员提出新型水声网络移动节点接入协议

    AUV(Autonomous Underwater Vehicle)等可移动的节点可开展大范围的水下探测工作,但其在由固定节点构成的水下传感器网络中进行上行链路传输时,会加剧网络碰撞,从而导致固定节点 ...

  8. java udp 协议_网络协议 - UDP 协议详解

    ¶ 网络协议 - UDP 协议详解 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解.@pdai ¶ UDP概述 UDP(User Datagram Protocol)即用户数据报协 ...

  9. 网络协议osi模型_网络协议|OSI模型第二层数据链路层

    MAC 地址 OSI第二层的作用,使局域网中的机器能互相连接并建立通信,还能够侦测传输错误.要向局域网中的其他机器发送信息,就需要借助 MAC 地址,来指定发送信息的目的地. MAC 地址其实就是网卡 ...

  10. 在网络上请求网页为什么会用到工业以太网协议_网络知识总结

    一下笔记是我看互联网协议入门(一) - 阮一峰的网络日志 所记录的笔记. 如果有人要认真学,强烈建议看上面的链接,以此为基础,再去看别的书,以及视频,因为目前来看阮一峰写的东西是最最最通俗易懂的 并且 ...

最新文章

  1. 投影串口测试程序_【原创】串口通信测试程序
  2. python三个小题
  3. ajax返回304,jquery $ajax GET请求在IE浏览器兼容中遇到的304 cache请求的经验分享
  4. MySQL【环境搭建 01】Linux root 用户部署 mysql-5.7.28 及 not allowed to connect to this MySQL server 和中文乱码问题处理
  5. C++ set的一些用法
  6. git cherry-pick合并某个commit
  7. 学习笔记 利用反射 手写一个简单的实体类 转json 的方法
  8. ML之FE:利用【数据分析+数据处理】算法对国内某平台上海2020年6月份房价数据集【12+1】进行特征工程处理(史上最完整,建议收藏)——附录
  9. VMware16的下载安装及搭建Linux环境
  10. Dell Precision M4800 AppleALC声卡驱动修复教程
  11. 使用office tool plus清除office激活状态
  12. 清华教授花费1年总结python学习路线共26章,学会它offer拿到手软
  13. win10 全屏秒退
  14. 【网络】远程连接路由器
  15. csp试题1:小明种苹果
  16. 三相四线相位表查错误接线方法与步骤
  17. [USACO09MAR]向右看齐Look Up(单调栈、在线处理)
  18. 会python_20小时学会Python,可能吗?
  19. 基于Springboot的小区物业管理系统
  20. 国内EDA软件公司有哪些?

热门文章

  1. Angular 依赖注入 useClass 的实例创建位置
  2. rxjs里scan operator的执行研究
  3. SAP Spartacus里的标准Banner设计
  4. Trial accounts of SAP Cloud Platform do not provide an Identity Authentication tenant
  5. Jerry文章《浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试一文的源代码》
  6. CRM order lock will trigger product read API
  7. view controller lifecycle discussion - beforeRendering
  8. Change Fiori launchpad logo
  9. SAP IBASE father component的创建
  10. 利用代码生成right scope数据