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

【网络】HTTP 协议

目录

    • 基本概念
      • 基于 HTTP 的系统组成
      • HTTP 的基本性质
    • HTTP 请求头 & 响应头
    • HTTP 的请求方法
    • HTTP 的返回码
    • HTTP 的 Cookie
    • HTTP 缓存 Cache-Control
    • 会话
    • HTTP/1.x 的连接管理

基本概念

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的。HTTP 遵循经典的客户端—服务端模型,客户端打开一个连接以发出请求,然后等待直到收到服务器端响应。HTTP 是无状态协议,这意味着服务器不会在两个请求之间保留任何数据(状态)。
在这里插入图片描述
在这里插入图片描述

基于 HTTP 的系统组成

在这里插入图片描述

  • 客户端:用户代理
  • Web 服务器
  • 代理(缓存、过滤、负载均衡、认证、日志)

HTTP 的基本性质

  • 简单易读
  • 可扩展
  • 会话,无状态

HTTP 请求头 & 响应头

在这里插入图片描述
在这里插入图片描述

HTTP 的请求方法

GET 方法请求一个指定资源的表示形式,使用 GET 的请求应该只被用于获取数据。
HEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。
POST 方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用。
PUT 方法用有效载荷请求替换目标资源的所有当前表示。
DELETE 方法删除指定的资源。
CONNECT 方法建立一个到由目标资源标识的服务器的隧道。
OPTIONS 方法用于描述目标资源的通信选项。
TRACE 方法沿着到目标资源的路径执行一个消息环回测试。
PATCH 方法用于对资源应用部分修改。

HTTP 的返回码

HTTP 响应状态码用来表明特定 HTTP 请求是否成功完成。 响应被归为以下五大类:

  • 信息响应 (100–199)
  • 成功响应 (200–299)
  • 重定向消息 (300–399)
  • 客户端错误响应 (400–499)
  • 服务端错误响应 (500–599)

HTTP 的 Cookie

HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。浏览器会存储 cookie 并在下次向同一服务器再发起请求时携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器——如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

Cookie 主要用于以下三个方面:

  • 会话状态管理:如用户登录状态、购物车、游戏分数或其他需要记录的信息
  • 个性化设置:如用户自定义设置、主题和其他设置
  • 浏览器行为跟踪:如跟踪分析用户行为等

Cookie 曾一度用于客户端数据的存储,因当时并没有其他合适的存储办法而作为唯一的存储手段,但现在推荐使用现代存储 API。由于服务器指定 Cookie 后,浏览器的每次请求都会携带 Cookie 数据,会带来额外的性能开销(尤其是在移动环境下)。新的浏览器 API 已经允许开发者直接将数据存储到本地,如使用 Web storage API(localStorage 和 sessionStorage)或 IndexedDB 。

HTTP 缓存 Cache-Control

会话

在像 HTTP 这样的客户端——服务器(Client-Server)协议中,会话分为三个阶段:

1、客户端建立一条 TCP 连接(如果传输层不是 TCP,也可以是其他适合的连接)。
2、客户端发送请求并等待应答。
3、服务器处理请求并送回应答,回应包括一个状态码和对应的数据。
从 HTTP/1.1 开始,连接在完成第三阶段后不再关闭,客户端可以再次发起新的请求。这意味着第二步和第三步可以连续进行数次。

HTTP/1.x 的连接管理

在这里插入图片描述

参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP

http://www.lryc.cn/news/483051.html

相关文章:

  • git push报错 unexpected disconnect while reading sideband packet
  • JSX 语法与基础组件使用
  • ReactPress:构建高效、灵活、可扩展的开源发布平台
  • emulator总结
  • 【Docker】‘docker‘ 不是内部或外部命令,也不是可运行的程序 或 批处理文件
  • Mysql高可用架构方案
  • Go,15岁了[译]
  • 【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡
  • 微擎框架php7.4使用phpexcel导出数据报错修复
  • Netty实现WebSocket Server是否开启压缩深度分析
  • 【Xrdp联机Ubuntu20.04实用知识点补充】
  • 【电脑】解决DiskGenius调整分区大小时报错“文件使用的簇被标记为空闲或与其它文件有交叉”
  • IDC机房服务器托管的费用组成
  • Halcon深度学习网络模型简介
  • ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析
  • 基于集成Whisper 与 Pepper-GPT改进人机交互体验并实现顺畅通信
  • C++设计模式精选面试题及参考答案
  • Linux下的vim和gdb
  • (蓝桥杯C/C++)——搜索
  • 【网页设计】HTML5 和 CSS3 提高
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR
  • 攻防世界38-FlatScience-CTFWeb
  • 探索 JNI - Rust 与 Java 互调实战
  • 网络安全-Linux基础(bash脚本)
  • Lucene 和 Elasticsearch 中更好的二进制量化 (BBQ)
  • jmeter基础05_第1个http请求
  • C++builder中的人工智能(25):AI中的C++多线程std::thread
  • RestSharp基本使用方法
  • MySQL与Oracle对比及区别