http 相关

#、HTTP 介绍:

HTTP 是 Hyper Text Transfer Protocol(超文本传输协议)的缩写。

是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

 

 HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

默认HTTP的端口号为80,HTTPS的端口号为443。

 

HTTP协议永远都是客户端发起请求,服务器回送响应。

 

工作流程:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

 

#、HTTP 请求可以使用多种请求方法。

HTTP 1.0定义参考:https://tools.ietf.org/html/rfc1945

HTTP 1.1定义参考:https://tools.ietf.org/html/rfc2616

 

 

#、常用的请求头:

 

#、常用的响应头信息:

 

#、实体头:

 

#、扩展头:

 

#、举例分析:

 

 

#、TCP/IP

TCP/IP 是互联网相关各类协议族的总称。TCP/IP是指TCP和IP这两种协议。TCP/IP是在IP协议的通信过程中,使用到的协议族的统称。

TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层。可以按照不同的模型分4层或者是7层。

将TCP/IP分为5层,越靠下越接近硬件。

1)应用层,应用程序收到传输层的数据后,接下来就是要进行解读,解读必须要先规定好格式,而应用层就是规定应用程序的数据格式,主要协议有HTTP等。

2)传输层,该层为两台主机上的应用程序提供端到端的通信,传输层有两个传输协议为TCP(传输控制协议)和UDP(用户数据报协议),TCP是一个可靠的面向连接的协议,UDP是不可靠或者说无连接的协议。

3)网络层,决定如何将数据从发送方到接收方,是建立主机到主机的通信。

4)数据链路层,控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。

5)物理层,该层负责物理传输,与链路有关,也与传输的介质有关。

当然,其实也有一个完整的OSI七层框架,与之相比,多了会话层、表示层。

OSI七层框架:物理层数据链路层网络层传输层会话层表示层应用层

6)表示层:主要处理两个通信系统中交换信息的表示方式,包括数据格式交换,数据加密与解密,数据压缩与终端类型转换等

7)会话层:它具体管理不同用户和进程之间的对话,如控制登陆和注销过程

 

 

#、协议与 HTTP 关系

 

#、一个完整的http请求过程:

1、域名解析:浏览器或客户端发起请求后,根据地址判断是否为本机地址,然后在本机设置的 host 中寻找,如果没找到则去 DNS 服务器查询域名对应 IP 地址。

2、建立 TCP 链接:根据 IP 地址寻址,然后访问指定端口;有客户端向服务器发送 TCP 连接请求,经过交换机->路由器;然后进行三次握手保证连接可靠性

3、发送请求:客户端发送 http 请求;服务器接受请求并处理;客户端根据服务器端的 response 渲染界面或进行逻辑处理。数据输送完毕,4次挥手断开连接。

 

#、DNS服务:域名解析

DNS服务和HTTP协议一样位于应用层。提供域名到IP地址之间的解析服务。DNS协议提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。

 

#、TCP三次握手:证明连接没问题

初始化状态:客户端处于close关闭状态,服务器处于Listen监听状态。

1)浏览器向服务器发出连接请求。客户端发送请求报文将 SYN=1 同步序列号和初始化 seq=x发送给服务端,服务端从初始化状态,创建连接,等待客户端,确认接收后的状态为SYN_Receive。这个时候客户端处于等待状态为SYN_Send。(服务端确认客户端发送信息和服务端接收信息没问题)

2)服务器回应了浏览器并要求确认。服务器接收到报文后(SYN=1,seq=x)收到请求后请求报文变为同步序列号SYN=1,初始化序列号seq=1,确认号ACK=1,ack=x+1,服务器为SYN_Receive状态,发送端的状态为:SYN_Send。(客户端确认接收信息没问题,回应服务端发送信息没问题)

3)浏览器回应了服务器的确认,连接成功。客户端收到服务端的数据包(收到响应后),然后发送同步序列号ack=y+1和数据包的序列号seq=x+1和ACK=1确认包作为应答(第三次握手:ACK=1,seq=x+1,ack=y+1),客户端和服务端变化为established状态。(服务端收到确认发送信息没问题,至此双端接收信息都没问题)

TCP6中状态:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急)

 

#、TCP 4次挥手:断开连接

当客户端和服务端通过三次握手建立了 TCP 连接以后,当数据传送完毕,断开连接就需要进行TCP的四次挥手。

1)客户端设置seq和 ACK ,向服务器发送一个 FIN=1报文段。此时,(第一次挥手,FIN=1,seq=u)客户端进入 FIN_WAIT 状态,表示客户端没有数据要发送给服务端了。

2)服务端收到了客户端发送的 FIN 报文段,向客户端回了一个 ACK 报文段。

3)服务端向客户端发送FIN 报文段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

4)客户端收到服务端发送的 FIN 报文段后,向服务端发送 ACK 报文段,然后客户端进入 TIME_WAIT 状态。服务端收到客户端的 ACK 报文段以后,就关闭连接。此时,客户端等待 2MSL(指一个片段在网络中最大的存活时间)后依然没有收到回复,则说明服务端已经正常关闭,这样客户端就可以关闭连接了。

参考:https://blog.csdn.net/bjweimengshu/article/details/103471498

 

#、HTTPS

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。

有两种基本的加解密算法类型:

1)对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

2)非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

https的通信过程:

优点:

1)客户端产生的密钥只有客户端和服务器端能得到;

2)加密的数据只有客户端和服务器端才能得到明文;

3)客户端到服务端的通信是安全的。

参考:http://www.blogjava.net/zjusuyong/articles/304788.html

 

#、状态码

列表:

参考:https://www.runoob.com/http/http-status-codes.html

 

#、Cookie和Session

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

1)Cookie将状态保存在客户端,Session将状态保存在服务器端

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

 

#、cookie 交互:

 

 

#、缓存的实现原理

WEB缓存(cache)位于Web服务器和客户端之间;缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

优点:

1)减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被响应,这个过程耗时更少,让web服务器看上去相应更快。

2) 减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

与缓存相关的扩展头:

 

#、断点续传的实现原理

-)HTTP协议的GET方法,支持只请求某个资源的某一部分;

-)206 Partial Content 部分内容响应;

-)Range 请求的资源范围;

-)Content-Range 响应的资源范围;

-)在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,来实现断点续传。

分块请求资源实例:

Eg1:Range: bytes=306302- :请求这个资源从306302个字节到末尾的部分;

Eg2:Content-Range: bytes 306302-604047/604048:响应中指示携带的是该资源的第306302-604047的字节,该资源共604048个字节;

客户端通过并发的请求相同资源的不同片段,来实现对某个资源的并发分块下载。从而达到快速下载的目的。目前流行的FlashGet和迅雷基本都是这个原理。

 

#、多线程下载的原理:

-)下载工具开启多个发出HTTP请求的线程;

-)每个http请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;

-)合并每个线程下载的文件。

 

#、http 代理服务器:

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。

代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。

主要功能:

1)突破自身IP访问限制,访问国外站点。如:教育网、169网等网络用户可以通过代理访问国外网站;

2)访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育 网开放的各类FTP下载上传,以及各类资料查询共享等服务;

3)提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度;

4)隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。

代理:

 

对于客户端浏览器而言,http代理服务器相当于服务器。

而对于Web服务器而言,http代理服务器又担当了客户端的角色。

 

#、虚拟主机

是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等,提供必要的站点功能与数据存放、传输功能。

所谓虚拟主机,也叫“网站空间”就是把一台运行在互联网上的服务器划分成多个“虚拟”的服务器,每一个虚拟主机都具有独立的域名和完整的Internet服务器(支持WWW、FTP、E-mail等)功能。一台服务器上的不同虚拟主机是各自独立的,并由用户自行管理。但一台服务器主机只能够支持一定数量的虚拟主机,当超过这个数量时,用户将会感到性能急剧下降。

实现原理:

虚拟主机是用同一个WEB服务器,为不同域名网站提供服务的技术。Apache、Tomcat等均可通过配置实现这个功能。

相关的HTTP消息头:Host。

例如:Host: www.baidu.com

客户端发送HTTP请求的时候,会携带Host头,Host头记录的是客户端输入的域名。这样服务器可以根据Host头确认客户要访问的是哪一个域名。

 

#、get/post

get和post虽然本质都是tcp/ip,但两者除了在http层面外,在tcp/ip层面也有区别。

get会产生一个tcp数据包,post两个

  • get请求时,浏览器会把headersdata一起发送出去,服务器响应200(返回数据),
  • post请求时,浏览器先发送headers,服务器响应100 continue

浏览器再发送data,服务器响应200(返回数据)。

posted @ 2022-03-16 16:23  名字不好起啊  阅读(30)  评论(0编辑  收藏  举报