http权威指南学习笔记1
什么是HTTP
http是一种网络通信协议,位于OSI网络模型的第七层,属于应用层协议。
http超文本传输协议,是基于TCP/IP通信协议来传递数据。
WEB浏览器、服务器和相关的WEB应用程序都是通过HTTP相互通讯的,通过HTTP协议我们可以在浏览器和服务器之前传递:文本,图片,多媒体,html文件,word文件等
HTTP在浏览器中的工作过程
地址解析
当我们在浏览器的地址栏里面输入 “http://www.baidu.com/a/img.jpg“ 的时候,浏览器就开始对改地址进行解析,解析的内容包括,协议名,主机名(主机地址),端口,请求的网络资源路径。
上面的地址我们可以解析到的结果为:- 协议名:http
- 主机名:www.baidu.com
- 端口:如果没有提供,默认为80
- 资源路径:/a/img.jpg
如果浏览器有做DNS缓存,我们就可以在缓存中找到主机域名对应的IP,如果没有会到操作系统当中读取DNS缓存(hosts文件),如果再没有操作系统就会根据网络配置当中的DNS配置去解析相对应的IP
封装HTTP请求的数据包
把地址解析返回的内容,结合客户端(浏览器)自己的信息,封装成一个HTTP请求的数据包(请求报文)
一个HTTP请求报文的数据格式大致如下:Accept:告诉服务器能发送那些媒体类型
Accept-Encoding:告诉服务器能发送那些编码方式
Accept-Language:告诉服务器能够发送那些语言
Accept-Charset:告诉服务器能够发送那些字符集
Cookie:客户端cookie信息
Referer:当前请求uri的文档的URL
Connection:允许客户端和服务器指定与请求/响应相关的选项
Cache-Control:用于随报文传送的缓存提示
user-Agent:发起请求的应用程序名称等等…
建立TCP/IP连接
根据上面一步得到的信息,就会通过TCP/IP协议向服务器建立一个连接。建立连接的方式就是我们通常所说的TCP/IP三次握手
1、访问的客户端A发送位码syn=1,随记生成seq number = 123456的数据包到服务器,服务器B由SYN=1知道,客户端A要求建立联机
2、服务器B收到请求后要确认联机信息,向客户端A发送 ack number=(主机a的seq+1),syn=1,ack=1,随记产生seq=7654321的包
3、主机A收到后检查ack number是否正确,以及位码ack是否为1,若正确,主机A再次发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则建立连接成功。发送报文数据
通过上面一步建立的连接,客户端向WEB服务发送请求的报文,请求报文由,请求行、请求头部、空行、请求数据4部分组成接收报文数据
WEB服务器通过解析请求报文,定位请求的资源,然后将资源副本通过TCP建立的连接传给客户端。响应的报文由状态行,响应头部,空行,响应数据4部分组成。关闭TCP/IP连接
若请求头当中的connection字段为close,则服务器在数据返回之后主动关闭TCP连接,客户端被动关闭连接
若请求头当中的connection字段为keep-alive,则该连接会保持一段时间,在该时间内可以继续互相传递数据解析返回的内容
客户端(通常是浏览器),首先解析状态行,查看表明请求是否成功,是否需要从缓存当中读取,然后解析每一个响应头,根据响应头信息来对响应的内容进行相关的编码和渲染,并在客户端当中显示。
HTTP主要包括那些内容
- URI
- 网络资源
- 事务
- 报文
- 连接
- 协议版本
- web的结构组件(代理,缓存,网管,隧道)
- HTTP/2
参考
《HTTP权威指南》
http://www.cnblogs.com/ranyonsue/p/5984001.html
http://blog.csdn.net/sundacheng1989/article/details/28239711
http://blog.csdn.net/sundacheng1989/article/details/52437128