HTTP协议

基本情况

HTTP协议的全称是“Hyper Text Transfer Protocol”(超文本传输协议),它定义了客户端和服务器之间交换报文的格式和方式。

URI和URL

  • URI:统一资源标识符,用来唯一地标识一个资源(比如文档、图像、视频等)。
  • URL:统一资源定位器,是一种具体的URI,可以用来标识一个资源,而且还指明了如何定位这个资源。一个完整的URL包含以下几个部分:

短连接和长连接

  • 短连接:在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
  • 长连接:从HTTP/1.1起,默认使用长连接,采用同一个TCP连接来发送和接收多个HTTP请求/应答,避免了连接建立和释放的开销。长连接还给HTTP流水线技术(客户端可以先一次性发送多个请求,而在发送过程中不需先等待服务器的回应)提供了可实现的基础。此外,需要注意与TCP保活(keep-alive)机制(当客户端和服务端长达一定时间没有数据交互时,内核为了确保该连接还有效,发送探测报文来检测对方是否在线,然后决定是否要关闭该连接)的对比,TCP保活机制是由内核实现的,而HTTP长连接是由应用程序实现的。

Cookie和Session

  • Cookie:
    • 背景:HTTP是无状态的,服务器记不住用户,每刷新一次网页就要重新登录。为解决此问题,HTTP/1.1引入Cookie。
    • 定义:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带上,用于告知服务端两个请求是否来自同一浏览器。
    • 用途:会话状态管理(如用户登录状态),个性化设置(如用户自定义主题),浏览器行为跟踪(如跟踪分析用户行为)
  • Session:
    • 原理:当用户登录时,服务器会创建对应的Session,Session创建完之后,会把Session的ID(这个ID相当于Cookie)发送到客户端并存储在浏览器中。这样客户端每次访问服务器时,都会带着这个ID,服务器拿到Session ID之后,在内存找到与之对应的Session。
    • 对比:Cookie是客户端保持状态的方法,而Session是服务器保持状态的方法。

与其它协议的关系

  • DNS:通过域名获取相应的IP地址
  • HTTP:生成针对目标Web服务器的HTTP请求报文。
  • TCP:为了方便通信,将HTTP请求报文分割成报文段,按序号分为多个报文段,把每个报文段可靠地传给对方。
  • IP:搜索对方的地址,一边中转一边传送。

报文结构

请求报文主要包括请求行(包含请求方法、请求URI和HTTP版本)、请求头和请求体。响应报文主要包括状态行(包含状态码、原因短语和HTTP版本)、响应头和响应体。

请求方法

HTTP中主要有以下请求方法:

状态码

状态码主要有以下几种:

HTTPS

HTTP与HTTPS的对比

  • HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全, HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
  • HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。此外,HTTPS因为有SSL验证,所以更耗费服务器资源,响应速度也更慢。
  • HTTP和HTTPS使用的是不同的连接方式,用的端口也不一样,前者是80,后者是443。

SSL/TLS

SSL代表安全套接字层,它是一种用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。SSL握手的主要过程如下: