当前位置: 首页 > news >正文

HTTP超文本传输协议

HTTP超文本传输协议

  • HTTP的基本原理
  • HTTP请求的组成
  • HTTP响应的组成
  • HTTP请求方法
  • HTTP状态码
  • HTTP的无状态性和持久连接
  • HTTPS(HTTP Secure)
  • Cookie 和 Session
    • Cookie
    • Session
    • 对比
  • 总结

HTTP(超文本传输协议)是一种用于从Web服务器传输超文本到本地浏览器的协议,是Web通信的基础。它属于应用层协议,主要用于客户端和服务器之间的数据交换,尤其是Web内容(如HTML文档、图片、视频等)的传输。HTTP是一个无状态、基于请求-响应模型的协议。
在这里插入图片描述

HTTP的基本原理

HTTP协议基于客户端-服务器模型,通常客户端是Web浏览器,服务器是提供资源的服务器。基本通信过程如下:

  • 客户端发送HTTP请求:用户在浏览器中输入网址或点击链接,浏览器向Web服务器发出HTTP请求,请求获取资源(网页、图片等)。
  • 服务器返回HTTP响应:Web服务器接收到请求后,处理请求并返回响应,通常包括所请求的资源、状态码、头部信息等。
  • 客户端解析响应:浏览器接收到服务器的响应后,解析其中的内容并呈现给用户。

HTTP请求的组成

HTTP请求主要由三部分组成:

  1. 请求行(Request Line):

    • 请求方法:HTTP方法(如GET、POST、PUT、DELETE、HEAD等),表示客户端希望对服务器资源执行的操作。
    • 请求URL:客户端请求的资源路径。
    • HTTP版本:请求使用的HTTP协议版本(如HTTP/1.1或HTTP/2)。
      例如,GET /index.html HTTP/1.1。
  2. 请求头(Request Headers):
    提供请求的附加信息,通常包括:

  • User-Agent:客户端浏览器的标识。
  • Host:请求的目标主机名。
  • Content-Type:请求体的媒体类型(在POST请求中常见)。
  • Accept:客户端能够处理的响应内容类型。
  • Cookie:客户端存储的会话信息。
  1. 请求体(Request Body):
    通常用于POST、PUT请求,包含发送到服务器的数据,如表单数据、JSON数据等。

HTTP响应的组成

HTTP响应也由三个主要部分组成:

  1. 响应行(Response Line):

    • HTTP版本:响应使用的HTTP协议版本。
    • 状态码:服务器返回的状态码,表示请求的处理结果。
    • 状态消息:对状态码的简短描述。
      例如,HTTP/1.1 200 OK。
  2. 响应头(Response Headers):
    包含关于服务器及响应的附加信息,常见的响应头包括:

  • Content-Type:响应体的数据类型(如text/html、application/json等)。
  • Content-Length:响应体的长度。
  • Server:服务器的名称及版本。
  • Set-Cookie:服务器返回的cookie信息。
  1. 响应体(Response Body):服务器返回的数据,通常是请求的资源内容,如HTML页面、图像文件、JSON数据等。

HTTP请求方法

HTTP协议定义了多个方法,常见的请求方法有:

  • GET:从服务器获取资源。GET请求不应有请求体(但可以有查询参数)。这是最常用的HTTP请求方法。
  • POST:将数据发送到服务器,常用于提交表单或上传文件。POST请求通常包含请求体,提交的数据可以是表单数据或JSON。
  • PUT:向服务器提交资源,并要求服务器存储该资源。PUT通常用来更新已有资源。
  • DELETE:请求删除指定资源。
  • HEAD:与GET类似,但只返回响应头,不返回响应体。通常用于获取资源的元信息。
  • OPTIONS:询问服务器支持哪些HTTP方法,通常用于跨域请求。
  • PATCH:部分更新资源,类似PUT,但只修改资源的部分内容。

HTTP状态码

HTTP状态码是服务器在处理请求时返回的数字代码,用来表示请求的结果。常见的HTTP状态码包括:

  • 1xx:信息性状态码:
    • 100 Continue:客户端可以继续发送请求。
  • 2xx:成功状态码:
    • 200 OK:请求成功,服务器返回请求的资源。
    • 201 Created:请求成功,且服务器创建了新资源。
    • 204 No Content:请求成功,但没有返回任何内容。
  • 3xx:重定向状态码:
    • 301 Moved Permanently:资源已永久移动到新的位置。
    • 302 Found:资源暂时移动到新的位置。
    • 304 Not Modified:资源未修改,可以使用缓存的版本。
  • 4xx:客户端错误状态码:
    • 400 Bad Request:请求无效,服务器无法理解。
    • 401 Unauthorized:需要身份验证。
    • 403 Forbidden:禁止访问,服务器理解请求但拒绝执行。
    • 404 Not Found:请求的资源不存在。
  • 5xx:服务器错误状态码:
    • 500 Internal Server Error:服务器内部错误。
    • 502 Bad Gateway:网关错误,服务器作为网关或代理时收到无效响应。
    • 503 Service Unavailable:服务器暂时不可用。

HTTP的无状态性和持久连接

  • 无状态性:HTTP协议本身是无状态的,这意味着每个请求都是独立的,服务器不记录客户端的状态信息。因此,每次请求都需要携带完整的信息(如身份验证信息、会话信息等)。
  • 持久连接:HTTP/1.1默认使用持久连接,意味着一次TCP连接可以处理多个HTTP请求/响应,这比每个请求都建立新的连接更加高效。持久连接通过Connection: keep-alive头部来控制。

HTTPS(HTTP Secure)

HTTPS是HTTP的安全版本,采用SSL/TLS协议加密HTTP请求和响应的数据,从而确保数据的机密性、完整性和身份认证。

  • SSL/TLS:为HTTP提供加密层(SSL已经被TLS取代,但两者通常被统称为SSL/TLS)。
  • 安全特性:
    • 数据加密:确保数据传输过程中不被窃听。
    • 身份验证:确保客户端和服务器的身份。
    • 数据完整性:确保数据在传输过程中未被篡改。

Cookie 和 Session

Cookie 和 Session 都是用于在客户端和服务器之间存储信息的技术,通常用来在用户与网站交互时保存状态和身份信息。尽管它们的目的相似,但工作原理和使用场景有所不同。
示例图:
在这里插入图片描述

Cookie

Cookie 是存储在用户浏览器中的小数据文件,用于保存用户的会话信息和其他状态信息。

  • 存储位置:保存在用户的浏览器中。
  • 存储内容:可以存储各种数据,如用户登录信息、首选项、购物车内容等。
  • 有效期:可以设置过期时间(如max-age或expires),如果不设置,默认是会话级别,即浏览器关闭后消失。
  • 传输方式:每次用户向服务器发送请求时,浏览器会自动将与该域名相关的cookie包含在请求头中(Cookie)。
  • 大小限制:每个cookie的大小通常不能超过4KB,且每个域名最多可以存储20个左右的cookie。

Session

Session 是服务器端用于保存用户会话信息的机制。与cookie不同,session的数据存储在服务器端,客户端仅保存一个唯一的标识符(即session ID)。

  • 存储位置:存储在服务器上。
  • 存储内容:可以存储大量数据,例如用户的身份、购物车内容、访问记录等。
  • 有效期:session的有效期通常是基于会话的,一般在用户关闭浏览器或设定的过期时间后失效。
  • 传输方式:服务器会在响应中将一个唯一的session ID通过cookie或URL传递给客户端,客户端每次请求时会携带这个ID,服务器通过ID找到对应的会话数据。

对比

在这里插入图片描述

总结

HTTP协议是Web通信的核心协议,它通过请求和响应模型提供了高效的网络通信。虽然HTTP本身是无状态的,随着HTTP/2和HTTPS的出现,Web的效率和安全性得到了显著提升。了解HTTP协议及其各种特性是开发Web应用和服务的基础。

相关文章:

  • 排序算法——快速排序
  • 探秘基带算法:从原理到5G时代的通信变革【一】引言
  • Unity 打包后EXE运行出现Field to Load il2cpp的一种情况
  • 《解锁HarmonyOS NEXT高阶玩法:艺术图像识别功能开发全攻略》
  • 打造高清3D虚拟世界|零基础学习Unity HDRP高清渲染管线(第一天)
  • 【JAVA面试题】== 和 equals() 的区别与使用场景
  • Aria Gen 2来了!AI感知、机器人、可穿戴计算的新突破
  • xenomai4的dovetail学习(5)——文件和网络
  • Windows下使用ShiftMediaProject方法编译FFmpeg
  • Google chrome拦截某些下载内容
  • Windows系统安装python2025最新安装包,包括环境配置,以及安装python编程软件PyCharm2024.3.3免费社区版本,详细全流程
  • QT——文件IO
  • Express + MongoDB 实现视频点播
  • Linux文档编辑相关命令详解
  • 初识神经网络的分类问题
  • GAN、Diffusion与美颜SDK:AI如何驱动人脸美型API进化?
  • OpenGL ES -> GLSurfaceView纹理贴图
  • 坐标变换介绍与机器人九点标定的原理
  • 【JavaEE进阶】图书管理系统 - 柒
  • PAT 甲级 1107 并查集
  • 西安机场回应航站楼“水帘洞”事件:屋面排水系统被冰雹堵塞
  • 新修订的《婚姻登记条例》明起施行,领证不用户口本了
  • 习近平出席俄罗斯纪念苏联伟大卫国战争胜利80周年庆典
  • 七大交响乐团在沪“神仙斗法”,时代交响奏出何等时代新声
  • 美英达成贸易协议,美股集体收涨
  • 视频丨习近平同普京会谈:共同弘扬正确二战史观,维护联合国权威和地位