程序员必备HTTP知识详解(1)

(一) Web及网络基础
当我们使用浏览器时候 , 在浏览器输入url时 , 会呈现出一些页面 .
像这种类似于发送请求网络资源的浏览器 称之为 客户端 (不单单仅仅指浏览器 还可能有使用 代码代用http服务)
像存放这些页面(统称网络资源)的地方 我们称之为 服务端
Web就是使用HTTP(超文本传输协议) 来将服务端的内容展现在客户端上的一种规范 .
要想了解HTTP必须理解TCP/IP协议族群的概要

为什么要有TCP/IP协议族群?
就类似于人之间的交流 , 一个不懂英语的中国人跟 一个美国人使用语言不一样 , 此时中国人想吃苹果 但美国人并不能听懂中文 , 也就没法进行交流 也就没法吃到苹果 , 故TCP/IP是让所有的服务端跟客户端都必须遵守的一种协议族群(说白了 服务端发送出来的东西客户端能看懂 客户端请求的东西服务端也能明白 从而构建出无障碍的交流方式) TCP/IP协议族群主要协议有 : DNS , IP , TCP , FTP , HTTP , SNMP , UDP , PPPoE 等 .
TCP/IP分层 :
分层的目的是为了如果所有互联网就使用一个协议 就会导致某个地方需要修改时 , 就必须把所有的都得修改 (太麻烦了) 所以才有了分层结构
TCP/IP协议族群分层结构主要分为 : 应用层 , 传输层 , 网络层 , 链路层.
应用层 : 预存了各类通用的应用服务 比如 FTP(文件传输协议) DNS(域名系统) HTTP 应用层决定了向用户提供应用服务时通信活动
传输层 : 提供处于网络连接中两台计算机之间的数据传输 TCP(传输控制协议) UDP 用户数据报协议
网络层 : 用来处理在网络中流动的数据包 注意 : 数据包是网络传输中的最小单位
链路层 : 用来处理连接网络的硬件部分
用HTTP举例子 当我们输入URL时 , 点击跳转 此时浏览器(客户端)发送一个我想去这个网址看这个网页的报文到传输层 , 传输层(TCP协议) 会进行HTTP报文分割 兵打上序号+ 端口号 发给网络层 . 网络层(IP协议) 会增加目的地(服务端)的MAC地址 (服务端网络地址) 接着到链路层
简单讲 客户端(应用层) + 请求报文 -> 传输层 + 序号 + 自己的接收端口 -> 网络层 + MAC地址 -> 链路层
从服务端拿到信息返回也就是反过程解析 同理
IP协议中最重要的是IP地址跟MAC地址 , IP地址一般来讲 是很容易变化的 但MAC地址是 网卡在烧录过程中就已经存在了 (是48个字节) 并且通信双方其实很少在同一个局域网内(通过ARP协议可以找到你当前请求的地址是否在当前局域网内 ) 能直接找到 更多的情况是 经过多台计算机和网络设备进行转发 这种机制我们叫路由选择
TCP协议 : 为与传输层 提供可靠的字节流服务 , 如果我们传输了图片或者视频 在网络世界里 这是一种很大数据 如果我们一次传完可能会不准确 而且会极大的浪费效率 故 我们会将 整个传输数据拆分成多个报文段 来进行传输 如果哪个报文段出现问题 直接补发此报文即可 且 TCP协议是一种确保可靠性的协议
三次握手
怎么确保可靠性呢 会通过三次握手建立连接
A 是客户端 B是服务端 Aa表示客户端的发送 Ab表示客户端的请求 Ba表示服务端的发送 Bb表示服务端的接受 如果要确保可靠性的协议 那么 A得知道Aa , Ab ,Ba , Bb是都没问题的 有任何问题都会导致发送跟接受报文失败 所以我们得需要三次握手 A先发送一个带有SYN的数据包到B 第一次握手 此时 B知道Aa , Bb没有问题 但A什么都不知道 紧接着B发送一个带有SYN/ACK的数据包 到A 这是第二次握手 A知道B的Ba,Bb,A的Aa ,Ab是没有问题的 , 但是此时B并仅仅还是知道刚才第一次握手的信息 在A把ACK的数据包发给B 这是第三次握手 此时B也知道了 Aa ,Ab ,Ba ,Bb是没问题 可以快乐的发送数据了

DNS服务
DNS也是应用层服务 是提供IP地址之间解析的服务 将比如百度www.baidu.com 解析成180.76.76.76因为数据更方便进行传输

通过以上基础知识我们就能知道 当我们输入URL(比如www.baidu.com)点击跳转时究竟发生了什么??
第一步 : 客户端调用DNS协议查找出来www.baidu.com的IP地址(202.108.22.5)
第二步 : 客户端生成目标服务器的HTTP请求报文
第三步 : 如果报文过大 TCP协议会将HTTP报文拆分成多个报文段(按照序号进行排序)
第四步 : IP协议会将报文发送到目标地址 (绝大部分都是通过多次转发才能到达目标服务器)
第五步 : 客户端将报文段重新组装成报文(通过TCP协议)
第六步 : 返回客户端想看的东西

URI (统一资源标识符) :
是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。
格式如下 :
[协议名]😕/[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值