一,Web基础:数据传输协议

72 阅读5分钟

一,Http概念

概念:超文本传输协议,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

image-20231011132908285

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于在客户端和服务器之间传输超媒体文档(如 HTML、CSS、JavaScript 等)的应用层协议。它是现代互联网数据通信的核心协议之一,广泛用于网页浏览、API 交互等场景。

基本概念

  • 无状态协议:默认不记录之前的请求信息,每个请求独立处理(通过 Cookie/Session 等机制实现状态管理)。
  • 基于请求-响应模型:客户端发送请求,服务器返回响应。
  • 文本协议:早期版本(如 HTTP/1.1)使用明文传输,HTTP/2 开始引入二进制分帧。

二,Http请求协议

Http请求协议的数据格式

  1. 请求行 从第一行开始,内容为:请求方式、资源路径、协议

  2. 请求头

    从第二行开始,格式key:value

    常见的请求头:

    Host请求的主机名
    User-Agent浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 .. Chrome/79,IE浏览器的标识类似Mozilla/5.0(WindowsNT ...) like Gecko
    Accept表示浏览器能接收的资源类型,如text/*,image/或者/*表示所有;
    Accept-Language表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
    Accept-Encoding表示浏览器可以支持的压缩类型,例如gzip, deflate等
    Content-Type请求主体的数据类型
    Content-Length请求主体的大小(单位: 字节)。
  3. 请求体

    用于给Post请求存放请求参数使用。

请求方式-GET: 请求参数在请求行中,没有请求体,如: /brand/findA1?name=OPPOstatus=1。GET请求大小是有限制的。 请求方式-POST: 请求参数在请求体中,POST请求大小是没有限制的。

如下图:

image-20231011134440706

三,Http响应协议

Http响应协议的数据主要分为三段,如下图所示:

image-20231011134352562

常见的状态码对应对应状态如下图:

image-20231011134607183

常见的响应体:

image-20231011134628105

四,Tomcat

概念:Tomcat是Apache 软件基金会一个核心项目,是一个开源免费的轻量级Web服务器,支持Servlet/JSP少量/avaEE规范。

Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于 Tomcat才能运行。

官网: tomcat.apache.org/

Web服务器是一个软件程序,对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷 主要功能是“提供网上信息浏览服务”。


Tomcat入门使用:

  1. 下载:官网下载,地址tomcat.apache.org/download-90…

  2. 安装:绿色版,直接解压即可

    卸载:直接删除目录即可

  3. 启动:双击: bin\startup.bat

    控制台中文乱码:修改conf/logging.properties

    image-20231011140611897

  4. 关闭 直接关掉运行窗口:强制关闭 bin\shutdown.bat::正常关闭 Ctrl+C:正常关闭

  5. Tomcat 部署项目 将项目放置到 webapps 目录下,即部署完成

文件目录解析:

image-20231011140641889

可能出现的问题:

  • 启动的时候崩溃:可能是JAVA_HOME配置错误

  • 端口冲突:要么关掉占用那个端口的软件,要么修改tomcat端口。

    修改端口:conf/server.xml

    image-20231011140921083

HTTP协议默认端口号为80,如果将Tomcat端口号改为80,则将来访问Tomcat时,将不用输入端口号

五,Https协议

HTTPS(HyperText Transfer Protocol Secure,超文本传输安全协议)是 HTTP 的安全版本,通过 加密传输身份验证 保护客户端与服务器之间的通信安全。它是 HTTP 与 TLS/SSL(Transport Layer Security/Secure Sockets Layer)协议的结合,广泛应用于需要隐私保护的场景(如在线支付、登录认证等)。


核心特性

  • 数据加密:传输内容通过对称加密(如 AES)保护,防止窃听或篡改。
  • 身份验证:通过数字证书验证服务器身份,防止中间人攻击。
  • 完整性校验:使用哈希算法(如 SHA-256)确保数据未被篡改。
  • 默认端口 443(HTTP 为 80)。

工作原理(TLS/SSL 握手)

HTTPS 的安全基础是 TLS/SSL 协议,其核心流程如下:

  1. 客户端发起请求

    • 客户端发送 Client Hello,包含支持的 TLS 版本、加密套件列表、随机数等。
  2. 服务器返回证书

    • 服务器发送 Server Hello,选择加密套件,并返回 数字证书(包含公钥、域名、签发机构等)。

    • 客户端验证证书有效性(如是否过期、是否由可信 CA 签发、域名是否匹配)。

  3. 密钥交换

    • 客户端生成 预主密钥,用服务器公钥加密后发送给服务器。

    • 双方通过预主密钥和随机数生成 对称加密密钥(会话密钥)。

  4. 加密通信

    • 后续数据传输使用对称加密(如 AES)保护,效率更高。

HTTPS vs HTTP

特性HTTPHTTPS
安全性明文传输,易被窃听/篡改加密传输,防窃听/篡改
端口80443
性能无加密开销,更快加密/解密带来额外开销(但 HTTP/2/3 优化后差距缩小)
证书无需证书需由可信 CA 签发的 SSL/TLS 证书
SEO 优势搜索引擎(如 Google)优先收录 HTTPS 网站

数字证书与 CA

  • 证书内容:域名、公钥、签发机构(CA)、有效期、数字签名等。
  • 证书链:由根证书 → 中间证书 → 服务器证书构成信任链。
  • CA(Certificate Authority):可信第三方机构(如 Let's Encrypt、DigiCert),负责验证服务器身份并签发证书。
  • 自签名证书:可自行生成,但浏览器会标记为“不安全”(仅适用于测试环境)。

六,常见请求头与响应头

6.1 常见请求头设置

在数据交互时要手动设置一些请求头数据才能保证正常的识别并且交互成功:

6.1.1 Content-Type

指定请求体的媒体类型

  • application/json: 表示 JSON 格式的数据,适用于 RESTful APIs 和现代 Web 应用程序。
  • application/xml: 表示 XML 格式的数据,常用于旧的 Web 服务和数据交换。
  • application/x-www-form-urlencoded: 表示表单数据,数据被编码为 key=value 形式,并以 & 分隔,主要用于传统的 HTML 表单提交
  • multipart/form-data:用于上传文件和表单数据,常用于文件上传时,包含文件的二进制数据和表单字段。
  • text/plain: 表示纯文本数据,用于简单的文本数据传输。
  • text/html: 表示 HTML 格式的数据,主要用于 Web 页面内容
  • text/css: 表示 CSS 样式表,用于传输 CSS 样式。
  • text/javascriptapplication/javascript: 表示 JavaScript 脚本,用于传输 JavaScript 代码。
  • application/octet-stream: 表示任意的二进制数据,通常用于文件下载或未知格式的数据。
  • application/pdf: 表示 PDF 文件,用于传输 PDF 文档。
  • application/zip:表示 ZIP 文件,用于传输压缩文件。
  • audio/mpeg: 表示 MP3 音频文件,用于传输 MP3 音频数据。
  • video/mp4: 表示 MP4 视频文件,用于传输 MP4 视频数据。
  • image/jpeg: 表示 JPEG 图像文件,用于传输 JPEG 图像数据。
  • image/png: 表示 PNG 图像文件,用于传输 PNG 图像数据。
  • image/gif: 表示 GIF 图像文件,用于传输 GIF 图像数据。

6.1.2 Accept

指定客户端能够接受的内容类型

  • */*: 表示客户端接受任何类型的内容
  • application/json:客户端希望接收 JSON 格式的数据。
  • application/xml: 客户端希望接收 XML 格式的数据。
  • text/html :客户端希望接收 HTML 格式的数据。
  • text/plain: 客户端希望接收纯文本格式的数据。
  • multipart/form-data: 客户端希望接收多个部分的数据,这种类型通常用于文件上传。

6.1.3 Accept-Encoding

指定客户端能够处理的编码方式

  • gzip: 表示客户端能够接受 Gzip 压缩格式的数据。

  • deflate: 表示客户端能够接受 Deflate 压缩格式的数据。

  • br: 表示客户端能够接受 Brotli 压缩格式的数据。

  • identity: 表示客户端能够接受未经压缩的内容。

  • *: 表示客户端能够接受所有编码方式,默认情况下接收所有支持的编码。

6.1.4 Connection

指定连接的类型,决定是否保持连接。

  • keep-alive:指示客户端希望保持连接打开,以便进行后续的请求和响应。使用持久连接可以减少连接建立和关闭的开销,提高性能。
  • close :指示客户端希望在完成当前请求之后关闭连接。这通常用于确保服务器在响应后立即关闭连接,以释放资源。
  • upgrade: 指示客户端希望使用升级协议(如从 HTTP 升级到 WebSocket)。这个选项在现代 Web 应用中较为常见。

6.1.5 其他header

  • Authorization: 用于提供身份验证凭证

  • Cookie:用于传递客户端的Cookie信息,通常用于会话管理。

  • User-Agent: 指定客户端的类型、操作系统、软件等信息,服务器可以根据这些信息做出相应的处理。

    User-Agent 头部的格式通常包含以下几个部分:

    1. 浏览器标识符:浏览器的名称和版本。
    2. 操作系统信息:客户端运行的操作系统及其版本。
    3. 渲染引擎:浏览器使用的渲染引擎及其版本。
    4. 设备信息:一些 User-Agent 可能包括设备类型(如移动设备或桌面)。

    举例:

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
    

    我们可以将其分解为以下几个部分:

    1. Mozilla/5.0:这是一个传统的标识符,表示浏览器的兼容性模式。虽然现在的浏览器通常都支持这个标识,但它并不代表实际的浏览器名称。最初这是为了兼容早期的浏览器。

    2. (Windows NT 10.0; Win64; x64):

      • Windows NT 10.0: 表示操作系统是 Windows 10。
      • Win64: 表示操作系统是 64 位的 Windows。
      • x64: 表示使用的是 64 位的处理器架构。
    3. AppleWebKit/537.36 (KHTML, like Gecko):

      • AppleWebKit/537.36: 表示浏览器使用的渲染引擎是 AppleWebKit,版本是 537.36。
      • (KHTML, like Gecko): 表示 AppleWebKit 是基于 KHTML 渲染引擎并且类似于 Gecko(Firefox 的渲染引擎)。
    4. Chrome/91.0.4472.124:

      • Chrome/91.0.4472.124: 表示浏览器是 Google Chrome,版本是 91.0.4472.124。
    5. Safari/537.36:

      Safari/537.36: 表示 Safari 渲染引擎的版本号。尽管是 Chrome 浏览器,很多浏览器仍会在 User-Agent 中标识 Safari 渲染引擎以支持网站的兼容性检查。

6.2 JSON数据交互

在进行 JSON 数据交互时,设置正确的 HTTP 头部(headers)是确保请求和响应顺利进行的重要步骤。以下是使用 JSON 数据交互时常见的 HTTP 头部

  1. Content-Type

    用途:指定请求体中数据的媒体类型。对于 JSON 数据,Content-Type 头部应该设置为 application/json

  2. Accept

    用途: 指定客户端能够接受的响应数据的媒体类型。如果客户端希望接收 JSON 数据,Accept 头部应该设置为 application/json

  3. Authorization

    用途: 如果 API 需要身份验证,Authorization 头部用于传递认证信息。例如,可以使用 Bearer Token 或 Basic Authentication。

6.3 上传文件时的 HTTP 头部

  1. Content-Type

    用途: 指定请求体中数据的媒体类型。对于文件上传,通常需要设置为 multipart/form-data

  2. Content-Length

    用途: 指定请求体的长度(以字节为单位)。在上传文件时,需要设置请求体的长度,以便服务器知道接收数据的大小。

  3. Authorization

    用途: 如果文件上传需要身份验证,使用 Authorization 头部传递认证信息。

  4. Expect

    用途: 用于在发送请求之前指示服务器是否期望某些条件。对于文件上传,Expect 头部可以设置为 100-continue,以便在发送大文件时先等待服务器确认。

6.4 下载文件时的 HTTP 头部

  1. Accept

    用途: 指定客户端能够接受的响应数据类型。如果要下载特定类型的文件,可以在 Accept 头部中指定相应的 MIME 类型,一般指定application/octet-stream用于接收任意二进制数据

  2. Range

    用途: 用于请求文件的一部分,以支持断点续传和部分下载。