程序猿阵线联盟-汇总各类技术干货程序员我爱编程

图解 http 阅读笔记

2018-01-22  本文已影响43人  Inlight先森

诞生

1989年,CERN(欧洲核子研究组织)的蒂姆·伯纳斯提出了一种能让远隔两地的研究者们共享知识的设想。

基本理念:借助多文档之间的关联形成的超文本,连成相互可参阅的 WWW(World Wide Web,万维网)。

提出3项 WWW 的构建技术:

成长时代

驻足不前的 HTTP

了解 TCP/IP 协议族

把与互联网相关联的协议集合来总称为 TCP/IP。HTTP 属于它内部的一个子集。TCP/IP 采用分层管理。

OSI的七层协议体系结构
7.应用层
6.表示层
5.会话层
4.运输层
3.网络层
2.数据链路层
1.物理层
TCP/IP 的四层的体系结构
4.应用层
3.传输层
2.网络层
1.数据链路层

OSI 的七层协议体系结构的概念清楚,理论也比较完整,但它既复杂又不实用,ICP/IP体系结构则不同,它现在已经得到了非常广泛的应用,因此在学习计算机网络原理是往往采用折中的办法,即综合 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。

五层协议的体系结构
5.应用层
4.传输层
3.网络层
2.数据链路层
1.物理层
TCP/IP 通信传输流

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从链路层往上走。
我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装。

IP协议

各类可容纳的地址数目不同。具体分类的规则和范围这里不做详细介绍,感兴趣的小伙伴自行查阅相关资料吧。

ARP协议

ARP(Address Resolution Protocol,地址解析协议),根据IP地址获取物理地址。原理:主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

ARP地址解析过程

TCP协议

TCP(Transmission Control Protocol ,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

如何保证可靠性?

三次握手

为什么是三次握手而不是两次或者四次?
知乎神回答1:
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……”

两次握手:
“喂,你听得到吗?”
“我听得到呀”
“喂喂,你听得到吗?”
“草,我听得到呀!!!!”
“你TM能不能听到我讲话啊!!喂!”
“……”

四次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,你能听到我吗?”
“……不想跟傻逼说话”

知乎神回答2:
简单说,让双方都证实对方能发收。
知道对方能收是因为收到对方的因为收到而发的回应。
具体:
1:A发,B收, B知道A能发
2:B发,A收, A知道B能发收
3:A发,B收, B知道A能收

DNS服务

DNS是应用层协议,事实上他是为其他应用层协议工作的,包括不限于HTTP和SMTP以及FTP,用于将用户提供的主机名或域名解析为IP地址。
具体过程如下:


DNS服务

URI 和 URL

URI(Universal Resource Identifier, 统一资源标识符)
URL(Universal Resource Locator, 统一资源定位符)
URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

各协议之间的关系

各协议之间的关系

HTTP支持的方法

HTTP/1.0 和 HTTP/1.1 支持的方法 GET:获取资源 POST:传输实体主体 PUT:传输文件 DELETE:删除文件

PUT 和 DELETE 方法自身不带验证机制,任何人都可以上传文件,存在安全性问题。

OPTIONS:询问支持的方法 TRACE:追踪路径

TRACE方法让Web服务端将之前的请求通信环回给客户端。发送请求时,在 Max-Forwards 首部字段中填入数值,没经过一个服务器端就将该数字减 1,当数值为 0 时就停止继续传输。TRACE方法就是用来确认连接过程中发生的一些列操作。

TRACE过程 CONNECT:要求用隧道协议连接代理

CONNECT这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。这样用户就可以访问到一些只有服务器上才能访问到的网站了,这就是HTTP代理。

HTTP报文

报文的结构

请求报文和响应报文结构的区别就是报文首部略有不同

请求报文(上)响应报文(下) 请求报文(上)响应报文(下)

常见请求头

常见响应头

返回结果和HTTP状态码

HTTP状态码

100-200 信息性状态码

状态吗 原因短语 含义
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议。

200-299 成功状态码

状态吗 原因短语 含义
200 OK 请求成功。一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求

300-399 重定向状态码

状态吗 原因短语 含义
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向

400-499 客户端错误状态码

状态吗 原因短语 含义
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息

500-599 服务器错误状态码

状态吗 原因短语 含义
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

以上状态码加粗的部分为比较常用的状态码,这些状态码只起到参考作用,不少返回的状态码响应都是错误的。比如:Web应用程序内部发生错误,状态码依然返回 200 OK。

HTTP 1.0和1.1现存的一些问题

HTTPS

为了解决以上问题,网景在1994年创建了HTTPS,并应用在网景导航者浏览器中。
  最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时(其实两个是一个东西,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC 2818正式确定下来。
  简单来说,HTTPS 就是安全版的 HTTP,并且由于当今时代对安全性要求更高,chrome 和 firefox 都大力支持网站使用 HTTPS,苹果也在 ios 10 系统中强制app使用 HTTPS 来传输数据,由此可见 HTTPS 势在必行。

HTTPS与HTTP的一些区别

SPDY

2012 年 google 如一声惊雷提出了 SPDY 的方案,大家才开始从正面看待和解决老版本 HTTP 协议本身的问题,SPDY 可以说是综合了 HTTPS 和 HTTP 两者有点于一体的传输协议, 主要解决:

SPDY 位于 HTTP 之下,TCP 和 SSL 之上,这样可以轻松兼容老版本的 HTTP 协议(将 HTTP1.x 的内容封装成一种新的 frame 格式),同时可以使用已有的 SSL 功能。

HTTP 2.0

顾名思义有了 HTTP1.x,那么 HTTP2.0 也就顺理成章的出现了。
  HTTP2.0 可以说是 SPDY 的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下两点:

HTTP2.0的新特性

后记

以上就是关于 HTTP,HTTP2.0,SPDY,HTTPS的一些基本理论,HTTP2.0,SPDY,HTTPS 没有深入讲解,后续输出。

TCP知乎相关链接
DNS知乎相关链接
URL知乎相关链接
状态码相关链接

上一篇 下一篇

猜你喜欢

热点阅读