【读书笔记】图解HTTP完整流程
1.1 使用 HTTP 协议访问 Web:
根据 Web 浏览器地址栏中指定的URL,从服务端获取资源等信息,在页面上展示。
Web 使用一种 HTTP (超文本传输协议)作为规范,完成从客户端到服务端等一系列流程。
Web 是建立在 HTTP 协议上通信的。

1.2 HTTP 的诞生:
1989-3,CERN(欧洲核子研究组织)蒂姆·伯纳斯-李(Tim Berners-Lee)博士提出一种能让远隔两地的研究者们共享知识的设想。
基本设计理念:借助多文档之间相互关联形成的超文本(HyperText),连城和相互参阅的 WWW(World Wide Web,万维网)。
三项WWW构建技术:
- 把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记的HTML(Hyper Markup Language,超文本标记语言);
- 作为文档传递协议的HTTP
- 指定文档所在的地址的URL(Unuform Resource Locator,统一资源定位符)
1996 年 5 月,HTTP 1.0
1997 年 1 月,HTTP 1.1 是目前主流的 HTTP 协议版本
小结:HTTP协议的出现主要是为了解决文本传输的难题
1.3 网络基础 TCP/IP
通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作的。HTTP 属于它内部的一个子集。
计算机与网络设备要相互通信,双方必须基于相同的方法,相同的规则。这种规则称为协议(Protocol)。

协议中存在各种各样的内容,像这样把互联网关联的协议集合起来总称为 TCP/IP 协议。协议族的统称。
TCP/IP 协议族分层:应用层、传输层、网络层、数据链路层。
应用层:决定了向用户提供应用服务时通信的活动。TCP/IP 协议族内预存了各类通用的应用服务,如 FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name Service,域名系统)服务就是其中两类。HTTP协议也处于该层。
传输层:提供处于网络连接中的两台计算机之间的数据传输。该层有两种协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol, 用户数据报协议)。
网络层:用来处理在网络上流动的数据包。数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。
链路层:用来处理网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC,及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往上走。
例如,客户端在应用层(HTTP协议)发出一个想看某个Web页面的 HTTP 请求。
接着为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,并在各个报文打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的 Mac 地址后转发给链路层。这样一来,发送网络的通信请求就准备齐全了。
接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP 请求。

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)。
1.4 与 HTTP 关系密切的协议:IP、TCP、DNS:
负责传输的 IP(Internet Protocol) 协议。IP 协议的作用是把各种数据包传送给对方。要保证确实传送到对方那里,则需要满足各类条件。 IP 地址 和 MAC 地址。
IP 地址指明了节点被分配到的地址,Mac 地址是指网卡所属的固定地址。IP 地址可以和 Mac 地址进行配对。IP 地址可变换,但 Mac 地址基本上不会更改。
ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 Mac 地址。
TCP 位于传输层,提供可靠的字节流服务。为了传输方便,将大块数据分割成以报文段(Segment)为单位的数据包进行管理。而可靠的传输服务协议是指,能够把数据准确可靠地传给对方。。
TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
为了准确无误地将数据送达到目的地,TCP 协议采用了三次握手策略。握手过程中使用了 TCP 的标志(flag)--SYN(synchronize)和 ACK(acknowledgement)。
发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

1.5 负责域名解析的 DNS 服务
DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。
计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。
1.6 各种协议与 HTTP 协议的关系
HTTP 协议职责:生成针对目标 Web 服务器的 HTTP 请求报文;
TCP 协议职责:为了通信方便,将 HTTP 请求报文分割成报文段,把每个报文段可靠的传给对方;
IP 协议的职责:搜索对方的地址,一边中转一边传送

1.7 URI 和 URL
URI(Uniform Resource Identifier)统一资源标识符:是由某个协议方案表示的资源定位标识符。协议方案是指访问资源所使用的协议类型名称。
常见的有 HTTP、FTP、mailto、telnet、File 等;
URI 用字符串标识某一互联网资源,而URL 标识资源的地点(互联网上所处的位置)。
URL 是 URI 的子集。

URI 格式:

2.1 HTTP 协议用于客户端和服务端之间的通信:
请求报文的构成:


2.3 HTTP 是不保存状态的协议:
HTTP 是不保存状态的协议,即无状态(stateless)协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或响应都不做持久化处理。
使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。
为了实现保存状态的功能,引入了 Cookie 技术。
2.4 请求 URI 定位资源:
HTTP 协议使用 URI 定位互联网上的资源。当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求 URI 包含在内。
2.5 告知服务器意图的 HTTP 方法:
GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。
如果请求的资源是文本,那就保持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行的输出结果。
POST 方法用来传输实体的主体。一般用 POST 方法传输实体的主体。POST 的主要目的并不是获取响应的主体内容。
PUT:传输文件 ,像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到指定 URI 指定的位置。
PUT 方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般 Web 网站不使用该方法。
Head:获取报文首部,不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
DELETE:删除文件:delete 方法按请求 URI 删除指定的资源。不带验证机制,一般的 Web 网站不用。当配合 Web 应用程序的验证机制,或遵守 REST 标准时还是有可能开发使用。
OPTIONS:方法用来查询对请求 URI 指定的资源支持的方法。
TRACE:方法是让 Web 服务器将之前的请求通信环回给客户端的方法。发送请求时,在 Max-Forward 首部字段中填入数值,每经过一个服务器端就将该数字减 1,当数值刚好减到 0 时,就停止传输,最后接收到请求的服务端则返回状态码 200 OK 的响应。

CONNECT:要求用隧道协议连接代理,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,安全传输层)协议把通信内容加密后经网络隧道传输。
2.6 使用方法下达命令:


2.7 持久连接节省通信量
HTTP keep-alive 特点,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。这样做减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务端的负载。另外,减少开销的那部分时间,
【读书笔记】图解HTTP完整流程的更多相关文章
- TIJ读书笔记02-控制执行流程
TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决 ...
- struts 2读书笔记-----struts2的开发流程
一.将struts 2的lib文件夹下地commons-fileupload.jar.commons-io.jar.freemarker.jar.javassist.jar.ognl.jar.stru ...
- 读书笔记---<<图解HTTP>>(一)
一.了解Web及网络基础 1. 网络基础TCP/IP 通常使用的网络包括互联网都是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集. 1.1 TCP/IP协议族 像这样吧与互联网关联 ...
- hadoop学习day1环境配置笔记(非完整流程)
hdfs的工作机制: 1.客户把一个文件存入hdfs,其实hdfs会把这个文件切块后,分散存储在N台linux机器系统中(负责存储文件块的角色:data node)<准确来说:切块的行为是由客户 ...
- Learning The Bash Shell读书笔记(整理)
最近搞了一本书 Learning Bash Shell,发现有人已经写了阅读笔记,我就在这边整理一下 来自blog:http://blog.sina.com.cn/n4mine Learning Th ...
- 《C#图解教程》读书笔记之六:接口和转换
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...
- 读书笔记——《图解TCP/IP》(1/4)
读书笔记——<图解TCP/IP>(1/4) 经典摘抄 第一章 网络基础知识 1.独立模式:计算机未连接到网络,各自独立使用的方式. 2.广域网 WAN 局域网 LAN 城域网 MAN 3. ...
- 图解http读书笔记
以前对HTTP协议一知半解,一直不清楚前端需要对于HTTP了解到什么程度,知道接触的东西多了,对于性能优化.服务端的配合和学习中也渐渐了解到了HTTP基础的重要性,看了一些大神对HTTP书籍的推荐,也 ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
随机推荐
- 股票数据Scrapy爬虫
功能描述: 技术路线:scrapy 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 数据网站的确定 获取股票列表: 东方财富网:http://quote.eastmoney.co ...
- 计算几何-Graham法-凸包
This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 关键一句话 Cr ...
- drf三大组件之认证组件与权限组件
复习 """ 视图家族 1.视图类:APIView.GenericAPIView APIView:作为drf的基础view:as_view()禁用csrf:dispatc ...
- JVM工具使用和Linux-top命令解析
top 命令 top 命令查看现在线程占用资料的情况. 第三行,cpu状态信息,具体属性说明如下: us — 用户空间占用CPU的百分比.(重要) sy — 内核空间占用CPU的百分比. ni — 改 ...
- Spring - MVC - 修改 Java 类后, 触发重启
1. 概述 学习 Spring MVC 下, 如何可控的触发重启 2. 背景 学习 Spring 场景 有些时候, 改完类, 需要重启 之前有听说, Spring MVC 可以自动重启 于是想, 尝试 ...
- app内区域截图利用html2Canvals保存到手机 截屏 (html2Canvas使用版本是:0.5.0-beta3。)
app内区域截图利用html2Canvals保存到手机 app内有时候需要区域内的截图保存dom为图像,我们可以使用html2Canvas将dom转换成base64图像字符串,然后再利用5+api保存 ...
- 「JSOI2015」isomorphism
「JSOI2015」isomorphism 传送门 我们还是考虑树哈希来判同构. 但是我们需要使用一些特殊的手段来特殊对待假节点. 由于是无向树,我们首先求出重心,然后以重心为根跑树哈希. 此处我们不 ...
- Go 开发关键技术指南 | Go 面向失败编程 (内含超全知识大图)
作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 关注"阿里巴巴云原生"公众号,回复 Go 即可查看清晰知识大图! 导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的 ...
- Scrapy - response.css()
选择文本 response.css('span::text') 选择href response.css('a::attr(href)')
- django urls.py 中的name 使用方法
使用场景: 当我们在url的时候,一般情况下都是使用很明确的url地址.如在网页里面使用<a href="/login">登录</a>.像这样的链接有很 多 ...