图解HTTP笔记

http 0.9  1990年  http 1.0  1996

Tcp/Ip分层模型

  • 应用层:Ftp Http DNS。
  • 传输层: 如 TCP UDP 。将报文分成报文段。“传输”指的是端对端(End-to-End)或者主机对主机(Host-to-Host)的传输。
  • 网络层: IP。处理数据包,在众多的路径选项内选择一条传输路径。
  • 数据链路层:如以太网。

发送请求流程:

  1. 客户端对服务器发送请求,先经过DNS将域名解析为IP地址, 应用层HTTP发送报文,
  2. 传输层TCPHTTP请求报文进行分割,打上标记序号及端口号后发给网络层,
  3. 网络层IP协议增加IP地址和作为通信目的地的MAC地址后转发给链路层。(OSI模型中链路层负责MAC地址)

IP地址:节点被分配到的位置。

MAC地址:网卡所属的固定地址。

ARP协议:解析地址的协议,根据通信方IP地址就可以反查出对应MAC地址

TCP协议:提供可靠字节流服务,将报文分割成报文段(segment)为单位的数据包进行管理。

     能够把数据准确可靠传给对方(采用三次握手:首先发一个带SYN标志的数据包给对方,

     接收端收到后回传一个带有SYN/ACK标志的数据包已传达确认信息,最后在发送一个带ACK标志的数据包代表握手结束)

DNSDomain Name System):提供域名到IP地址之间的解析服务。

URI(统一资源标识符Uniform Resource Identifier):用字符串标识某一互联网资源。

URL(统一资源定位符Uniform Resource Location):表示资源的地点(互联网上所处的位置)

终上所述URLURI的子集。

 

HTTP是不保存状态的协议:

  • HTTP协议自身不对请求和响应之间的通行状态进行保存,也就是说协议对于发送过的请求或者响应都不做持久化处理。
  • 好处:减少服务器CPU及内存资源的消耗。更快的处理大量事务,确保协议的和伸缩性。

 

HTTP方法

  • GET用来请求访问已被URI识别的资源。
  • POST用来传输实体的主体。
  • PUT传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置。
  • HEAD:获得报文首部,和GET方法一样,只是不返回报文主题部分,用来确认URI的有效性及资源更新的日期时间。
  • DELETE:删除文件,与PUT相反的方法,按照请求URI删除指定的资源。
  • OPTIONS:用来查询请求URI指定的资源支持的方法。
  • TRACE:追踪路径。
  • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

长连接(HTTP Persistent ConnectionsHTTP keep-alive):

  • 长连接特点是只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP1.1中所有连接都是长连接
  • 好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载,减少开销的那部分时间,使得HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应的提高了。

管线化:请求发送后不用等待响应就可以直接发送下一个请求。比长连接好要快,请求次数越多效果越明显。

 

HTTP报文:用于HTTP协议交互的信息。

       客户端的HTTP报文叫做请求报文,服务器的叫做响应报文,本身是由多行(CR+LF作换行符)数据构成字符串文本。

       HTTP报文大致可分为报文首部和报文主体两块。并不一定要有报文主体。

 

4HTTP首部字段类型:请求首部字段,响应首部字段,通用首部字段,实体首部字段。

 

报文(message)和实体(entity):通常报文主体==实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才有差异。

 

内容编码:

  • 指明应用在实体内容上的编码格式,并保存实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
  • 常用内容编码方式:gzip(GUN zip),compress, deflate, identity。

 

状态码类别

  • 1XX:接收的请求正在处理。
  • 2XX:Success(成功状态码),请求正常处理完毕。
  • 3XXRedirection(重定向状态码),需要进行附加操作已完成请求。
  • 4XXClient Error(客户端错误状态码),服务器无法处理请求。
  • 5XX:Server Error(服务器错误状态码),服务器处理请求出错。

通信数据转发程序:代理、网关、隧道

  • 代理:接收客户端发送的请求后转发给其他服务器。不改变URI。
  • 缓存代理:代理转发响应时,缓存代理(Caching Proxy)会预先将资源的副本保存在代理服务器上,当缓存代理再次接收到相同的资源请求时,就可以将之前缓存的资源作响应返回。
  • 透明代理:转发请求时,不对报文做任何加工的代理类型被称为透明代理。反之,对报文内容进行加工的代理称为非透明代理。
  • 网关:网关能使通信线路上的服务器提供非HTTP服务。
  • 隧道:建立起一条与其他服务器的通信线路,使用SSL等加密手段进行通信。

 

保存资源的缓存:

  • 缓存服务器(缓存代理):优势在于利用缓存可避免多次从源服务器转发资源。
  • 客户端缓存:把客户端缓存称为临时网络文件(Temporary Internet File)。浏览器缓存如果有效,就不用向服务器请求相同资源了,直接从本地磁盘内读取。

 

HTTP缺点:

  • 通信使用明文(不加密),内容可能会被窃听。
  • 不验证通信方的身份,因此有可能遭遇伪装。
  • 无法证明报文的完整性,所以有可能已遭到篡改。

 

通信加密:HTTP协议中没有加密机制,但可以通过和SSLSecure Socket Layer,安全套接层)或TLSTransport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(超文本安全传输协议HTTP over SSL)。

 

内容的加密:HTTP报文里所含的内容(报文主体)进行加密处理。

 

SSL证书:SSL不仅提供对通信线路加密处理,还使用了一种称为“证书”的手段。可用于确定通信方。

 

HTTPSHTTP加上加密处理和认证以及完整性保护后即是HTTPSHTTPS并非新协议,只是HTTP通信接口部分用SSLTLS协议代替了。

 

共享密钥加密(对称密钥加密):双方都要持有密钥进行加密解密,但如何将密钥交给对方,不被攻击者获得是个难题。

 

SSL采用加密:

公开密钥加密(非对称密钥加密):就是服务器有着公开密钥和私有密钥,发布公开密钥,客户端使用公开密钥对报文主体进行加密处理,发送到服务器后服务器用私有密钥进行解密。

 

共享密钥加密和公开密钥加密:速度比后者快。

 

HTTPS采用加密:HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

步骤:1.使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥。

           2.确保交换的密钥是安全的情况下,使用共享密钥加密的方式进行通信。

 

Session管理及Cookie应用:

  • 客户端把用户ID和密码等登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器。
  • 服务器进行身份认证,会发放用以识别用户的Session ID,将用户认证状态与Session ID绑定后 加盐(salt)增加额外信息,再使用散列函数计算出散列值后保存在服务器端。
  • 向客户端返回响应时,会在首部字段Set-Cookie内写入Session ID。
  • 客户端接收到从服务器发来的Session ID后,会将其作为Cookie保存在本地。下次再发送请求时,浏览器会自动发送Cookie。服务器可通过验证接收到的Session ID识别用户和其认证状态。

 

原文地址:https://www.cnblogs.com/JimKing/p/8593019.html