
文章目录一、HTTP协议互联网的基础通信协议1.1 什么是HTTP1.2 HTTP的发展历程1.3 HTTP的特性二、HTTP协议的组成2.1 HTTP报文格式2.1.1 请求报文2.1.2 响应报文2.2 URL资源的唯一标识2.3 HTTP请求方法2.4 报头Header2.5 HTTP状态码三、HTTP的实际应用3.1 浏览器地址栏 HTML标签3.2 HTML表单form四、HTTPS4.1 为什么需要HTTPS4.2 HTTPS的加密机制4.2.1 对称加密4.2.2 非对称加密4.2.3 证书与CA认证4.3 HTTPS的完整工作流程4.4 HTTP与HTTPS的区别一、HTTP协议互联网的基础通信协议1.1 什么是HTTPHTTPHyperText Transfer Protocol超文本传输协议是一种应用层协议诞生于1991年如今已发展为互联网最主流的通信协议。它基于TCP/IP协议族工作负责规范客户端与服务器之间的数据传输格式和交互流程。这里的“超文本”不仅指文本数据如HTML、CSS还包括图片、视频、音频等二进制资源。我们打开一个网站时浏览器通过HTTP协议向服务器发送请求服务器返回响应响应内容经浏览器解析后就变成了我们看到的网页界面。1.2 HTTP的发展历程HTTP协议历经多次迭代不断优化性能和功能HTTP/0.91991最初版本仅支持GET方法只能传输纯文本HTML。HTTP/1.01997新增POST、HEAD等方法支持多种数据类型图片、音频等引入HTTP头部字段。HTTP/1.11999目前应用最广泛的版本支持长连接Keep-Alive、管道化请求、Chunked编码等解决了1.0版本的性能瓶颈。HTTP/2.0基于二进制帧传输支持多路复用、头部压缩、服务器推送大幅提升传输效率。HTTP/3.0正在完善中基于UDP协议实现解决了TCP协议的队头阻塞问题Google、Facebook等大厂已率先支持。1.3 HTTP的特性无状态协议本身不记录客户端的历史交互信息每次请求都是独立的。如需保持状态如登录状态需通过Cookie、Session等机制实现。基于请求-响应模式客户端主动发送请求服务器被动返回响应不存在服务器主动向客户端推送数据的情况。文本协议HTTP报文是明文的文本格式便于调试和理解但也存在安全隐患。二、HTTP协议的组成2.1 HTTP报文格式HTTP通信的基本单位是报文分为请求报文和响应报文两者结构相似均由“首行头部空行正文”四部分组成。2.1.1 请求报文以访问CSDN页面为例首行格式为方法 URL 协议版本请求头Header由多个键值对组成每个键值对占一行键和值用: (空格)分隔头部用于描述请求的属性如数据类型、缓存策略等。http请求头中键的取值和值的取值都是固定的空行用于分隔头部和正文是HTTP协议的强制要求避免出现“粘包问题”。正文Body可选部分用于传输请求数据如POST请求的表单数据长度由Content-Length头部字段指定。2.1.2 响应报文首行格式为协议版本 状态码 状态码描述响应头Header与请求头部格式一致包含响应的属性空行分隔头部和正文。正文Body服务器返回的实际数据可以是HTML页面、JSON数据、图片等。2.2 URL资源的唯一标识我们俗称的“网址”其实是URLUniform Resource Locator统一资源定位符它唯一标识互联网上的一个资源。URL的完整格式如下http://www.example.com:80/dir/index.htm?uid1#ch1各部分含义协议方案名如http、https也可以是jdbc:mysql访问MySQL数据库等。服务器地址www.example.com可以是域名或IP地址域名会通过DNS解析为IP。服务器端口号:80HTTP默认端口80HTTPS默认443省略时使用默认端口。带层次的文件路径/dir/index.htm想要访问的是某个主机IP确定上某个程序端口号确定管理的某个资源在服务器上的存储路径。层次可以理解为目录。查询字符串[Querry String]?uid1键值对结构用于向服务器传递额外参数键值对之间用分隔键与值用分割。片段标识#ch1用于页面内跳转不会发送到服务器。常用于文档类网站。2.3 HTTP请求方法方法说明特点GET获取资源无请求正文参数通过URL传递可缓存幂等POST提交数据有请求正文参数通过正文传递不可缓存非幂等PUT更新资源用于全量更新资源幂等DELETE删除资源用于删除服务器资源幂等HEAD获取响应头部与GET类似但仅返回响应头部无正文OPTIONS询问支持的方法用于获取服务器支持的HTTP方法GET与POST的区别GET和POST没有本质区别大多数情况都可以混用语义不同GET用于“获取”资源POST用于“提交”数据。数据传输方式GET一般没有body通过Query String传递数据POST通过正文传递。缓存特性GET请求可被浏览器缓存POST请求不可缓存。幂等性GET请求建议设计为多次执行结果一致幂等POST请求多次执行可能产生不同结果如重复提交订单。POST典型使用场景登录、上传。请求中带有正文的正文就是保存了当前上传的数据内容2.4 报头Header报头中常见的键值对Host表示服务器主机的地址和端口号。绝大情况下Host与URL中的IP地址和端口号属性是一致的。在HTTPS协议中传输过程涉及到加密url部分不会被加密而header和body部分会被加密Content-Length表示body中数据长度单位是字节。对于TCP来说一个链接可以发送多个请求而服务器收到的数据需要区分没有body的http请求读到空行就可以认为是结束了有body的http请求先读取首行和header读到空行解析header中Content-Length的值再读固定的字节长度Content-Type表示body中数据格式。类型取值浏览器解析方式HTMLtext/html解析其中的标签把标签转换为界面显示CSStext/css解析其中的选择器和属性把指定内容应用到页面样式上JSapplication/javascript通过JS引擎执行JS中的逻辑JSONapplication/json浏览器不会做任何处理由对应的JS也就是程序员写的逻辑来处理图片image/png(jpg)按照图片的二进制格式解析出来处理2.5 HTTP状态码状态码用于表示服务器对请求的处理结果分为5大类类别含义常见状态码1XX信息性状态码100 Continue继续2XX成功状态码200 OK请求成功、204 No Content无内容3XX重定向状态码301 永久重定向、302 临时重定向、304 Not Modified缓存命中4XX客户端错误状态码400 Bad Request请求参数错误、403 Forbidden访问拒绝、404 Not Found资源不存在5XX服务器错误状态码500 Internal Server Error服务器内部错误、504 Gateway Timeout网关超时常见状态码场景200 OK最常见表明请求成功服务器返回了请求的资源。302 临时重定向常用于登录成功后跳转到主页。404 Not FoundURL对应的资源不存在可能是地址输入错误。403 Forbidden服务器拒绝访问通常是未登录或无权限。418 I am a teapot我是一个茶壶 彩蛋500 Internal Server Error服务器代码执行出错如程序bug。三、HTTP的实际应用在实际开发中我们可以通过多种方式构造HTTP请求以下是常见场景3.1 浏览器地址栏 HTML标签浏览器地址栏输入URL直接发送GET请求。HTML标签link加载CSS、img加载图片、script加载JS等标签会自动发送GET请求。3.2 HTML表单formform标签是HTML中用于提交数据的标签支持GET和POST方法GET 请求formactionhttps://www.example.com/apimethodGETinputtypetextnameusernameplaceholder用户名inputtypepasswordnamepasswordplaceholder密码inputtypesubmitvalue登录/formPOST 请求formactionhttps://www.example.com/apimethodPOSTinputtypetextnameusernameplaceholder用户名inputtypepasswordnamepasswordplaceholder密码inputtypesubmitvalue登录/formaction指定请求的URL。method指定请求方法GET/POST。input标签的name属性作为请求参数的keyvalue为用户输入的内容。四、HTTPS4.1 为什么需要HTTPSHTTP协议的最大问题是明文传输数据在传输过程中可能被篡改、窃取或劫持如运营商劫持、黑客攻击。HTTPSHTTP Secure正是为解决HTTP的安全问题而生它在HTTP基础上增加了SSL/TLS加密层实现数据传输的机密性、完整性和身份认证。4.2 HTTPS的加密机制HTTPS结合了对称加密和非对称加密的优点既保证安全性又兼顾传输效率。4.2.1 对称加密特点使用同一个密钥进行加密和解密运算速度快但密钥传输存在安全风险密钥被窃取则加密失效。示例按位异或运算明文a1234与密钥key8888异或得到密文9834密文再与密钥异或可还原明文。4.2.2 非对称加密特点使用一对密钥公钥私钥公钥可公开私钥仅持有者拥有。公钥加密的密文只能用私钥解密私钥加密的密文只能用公钥解密。运算速度慢但密钥传输安全。应用场景用于协商对称加密的密钥避免密钥明文传输。4.2.3 证书与CA认证为解决“公钥伪造”问题中间人替换服务器公钥HTTPS引入了数字证书和CACertificate Authority认证服务器向CA机构申请数字证书证书包含服务器公钥、域名、有效期等信息并由CA机构用私钥签名。客户端获取证书后通过操作系统内置的CA公钥验证签名确认证书合法性未篡改、未过期。只有验证通过的证书客户端才会使用证书中的公钥进行后续通信。4.3 HTTPS的完整工作流程客户端向服务器发送HTTPS请求请求中包含支持的加密算法和哈希算法。服务器返回数字证书包含公钥和选定的加密/哈希算法。客户端验证证书合法性检查证书有效期是否过期。检查证书发布机构是否受信任操作系统内置信任的CA。用CA公钥解密证书签名与本地计算的证书哈希值对比确认证书未被篡改。证书验证通过后客户端生成随机对称密钥R用服务器公钥加密R发送给服务器。服务器用私钥解密获取对称密钥R。后续通信客户端和服务器均使用对称密钥R加密/解密数据实现安全传输。4.4 HTTP与HTTPS的区别特性HTTPHTTPS传输方式明文传输SSL/TLS加密传输端口80443安全性无身份认证、数据易被篡改/窃取有身份认证、数据机密性和完整性保障性能无加密开销性能略高加密/解密有开销性能略低证书无需证书需向CA申请数字证书