序言
很早之前出了一个系列的《当我们谈网络,谈些什么》专题,得到了比较好多反响和认可。再次准备更仔细深入的再来做一起,更深入,更全面的来讲解网络知识。涉及Http,P2P,DNS,TCP,UDP,网络层,链路层,无线网络,移动网络,网络安全加密等。结合之前的体系,将对网络有更深层次的理解。本系列会更偏向于其中的知识,覆盖的知识面会更广。而不是体系上的学习,对于体系的学习,可以参考专栏中之前的系列文章。
Http
Http超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
连接类型
Http具备两种两节方式。
持久连接
在一个TCP连接上进行数据的传输
非持久连接
每一次请求,都建立一个TCP连接,每次数据传输都需要进行握手,使得数据传送时间变长
比较:持久连接当用户量比较大的时候,会导致服务器的开销巨大,但是由于每次无需握手等操作,数据的传输速率是非常快的。每一个非持久连接都要相比持久连接增加了两个RTT、
Http报文格式
Http请求报文
-
请求行
请求方法字段(Get,Post,Head,Put,Delete)
URL
Http版本号
首部行
请求数据
各类请求方法
Get:用来获取服务器上指定内容
Post:向服务器提交数据
Head:类似于Get方法,类似于get方法,但是服务器没有实体响应,用来给开发者进行调试跟踪
Put:上传数据至服务器
Delete:用户用来删除服务器中数据
首部行
Http头部列表具体可见此列表内容。此处列举几个常见类型。
当我们的请求方法为Get时,我们的请求主体内是为空的,但是当我们为Post的时候,需要我们提供部分数据.
协议头字段名 | 说明 | 示例 |
---|---|---|
Accept-Charset | 能够接受的字符集 | Accept-Charset: utf-8 |
Accept | 能够接受的回应内容类型(Content-Types) | Accept: text/plain |
Connection | 该浏览器想要优先使用的连接类型 | Connection: keep-alive Connection: Upgrade |
Content-Length | 以 八位字节数组 (8位的字节)表示的请求体的长度 | Content-Length: 348 |
Content-Type | 请求体的 多媒体类型 | Content-Type: application/x-www-form-urlencoded |
Cookie | 在之前与服务器的交互中下发得到的Cookie | Cookie: $Version=1; Skin=new; |
Host | 服务器的域名(用于 虚拟 主机 ),以及服务器所监听的 传输控制协议端口 号。如果所请求的端口是对应的服务的标准端口,则 端口 号可被省略。 | Host: en.wikipedia.org:80 |
Range | 仅请求某个实体的一部分。字节偏移以0开始。参考 字节服务 。 | Range: bytes=500-999 |
Upgrade | 要求服务器升级到另一个协议。 | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
Max-Forwards | 限制该消息可被代理及网关转发的次数。 | Max-Forwards: 10 |
If-Modified-Since | 允许在对应的内容未被修改的情况下返回304未修改 | If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT |
If-None-Match | 允许在对应的内容未被修改的情况下返回304未修改 | If-None-Match: "737060cd8c284d8af7ad3082f209582d" |
请求体
POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。常见的Content-type有如下几种类型。
application/x-www-form-urlencoded
这应该是最常见的 POST 提交数据的方式了。浏览器的原生