【读书笔记】图解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#语言的各种 ...
随机推荐
- Modelsim, Debussy联合仿真Xilinx
http://wenku.baidu.com/view/8363d40003d8ce2f006623e9.html 另外一个博客 生成Xilinx库 先调用ISE的simulation librar ...
- Android输入法挤乱布局问题
今天做布局的时候 嵌套的TbaleLayout里面有三行 但是准备输入的时候输入法自动将整个activity布局全部往上挤 导致输入框变小甚至消失 弄的很是郁闷 在网上查了之后 发现有些人是因为 ...
- redis常用配置参数
首先弄清楚当前redis读取的是哪个配置文件,然后去配置文件修改,例如windows 打开服务列表,点击Redis,右键属性 "D:\Program Files\Redis\redis-se ...
- 快递查询API
https://market.aliyun.com/products/56928004/cmapi014394.html#sku=yuncode839400000
- Git - git bash 在 windows 下创建软连接
1. 概述 使用 git bash 在 windows 下创建软连接 或者叫 快捷方式 感谢 Tony 老师的帮助 Tony 的技术笔记 Windows 使用 ln -s 创建软链接 2. 问题 需求 ...
- find 报错 find: paths must precede expression:
编写shell脚本,报错,如下面 [root@localhost backup]#find ./ -name mysqldump* -mtime +3 -delete [root@localhost ...
- 【Angular】关于angular引用第三方组件库无法改变其组件样式 :host ::ng-deep
[Angular]关于angular引用第三方组件库无法改变其组件样式 :host ::ng-deep css修改:无效 .ant-input-affix-wrapper .ant-input:not ...
- 每天进步一点点------Sobel算子(2)
转载 http://blog.csdn.net/tianhai110 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值. ...
- windows线程同步的几种方式
以下为main函数的测试代码 具体线程同步的实现代码请下载:https://github.com/kingsunc/ThreadSynchro #include <stdio.h> #in ...
- Linux kali添加root用户密码
1.1.打开终端 2.输入命令: sudo passwd root