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

HTTP概要

文章目录

  • 什么是HTTP?
  • URL的结构
  • 请求报文结构
    • 请求方法
      • GET
      • HEAD
      • POST
      • PUT
      • DELETE
      • TRACE
      • OPTIONS
      • CONNECT
      • PATCH
      • 解释
    • 请求头字段
  • 响应报文结构
    • 响应状态
    • 响应头字段
  • HTTP会话
    • 3次握手
    • 无状态协议

什么是HTTP?

HTTP,即Hypertext Transfer Protocol(超文本传输协议)

它是一个”请求-相应“的协议,用于客户端和服务器间交换信息

URL的结构

HTTP resources 通过URL来定位
URL,即 Uniform Resource Locators(统一资源定位符)

结构如下:
–scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

  • scheme, 方案
    • 指定用于访问资源的协议或方法
    • 如http, ftp, mailto, file, data, irc
  • 权限, 包括:
    • 身份验证部分(可选)
      • username
      • password
      • user:password@
    • host
      • registered name / IP address
      • 端口号(可选)
  • 路径
    • 资源在服务器上的相对路径
  • query, 可选的查询字符串
    • 包含资源的附加参数或信息
  • fragment(可选,片段标识符)
    • 指向资源的特定部分
    • #引入

例子: http://www.example.com/index.html

请求报文结构

# request line, 请求行
GET / HTTP/1.1# request header fields, 请求头首部
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive# 一个空行# 可选的消息主题

请求方法

HTTP定义了用于指示对特定资源执行的期望操作的方法。

GET

GET方法请求获取指定资源的表示。使用GET的请求应仅用于检索数据,不应产生其他影响。(幂等

HEAD

HEAD方法请求与GET请求相同的响应,但不包含响应体。(幂等

POST

POST方法请求服务器接受包含在请求中的实体作为URI标识的Web资源的新下级。

PUT

PUT方法请求将封装的实体存储在提供的URI下。(幂等

DELETE

DELETE方法删除指定的资源。(幂等

TRACE

TRACE方法回显接收到的请求,以便客户端可以查看中间服务器是否进行了哪些(如果有的话)更改或添加。(幂等

OPTIONS

OPTIONS方法返回服务器支持的指定URL的HTTP方法。这可用于通过请求’*'而不是特定资源来检查Web服务器的功能。(幂等

CONNECT

CONNECT方法将请求连接转换为透明的TCP/IP隧道,通常用于通过未加密的HTTP代理便于SSL加密通信(HTTPS)。

PATCH

PATCH方法对资源应用部分修改。

所有通用的HTTP服务器都要求至少实现GET和HEAD方法,并在可能的情况下也实现OPTIONS方法。

解释

一些方法(例如HEAD、GET、OPTIONS和TRACE)按照惯例被定义为“安全”,这意味着它们仅用于信息检索,不应改变服务器的状态。

PUT和DELETE方法被定义为“幂等”,这意味着多个相同的请求应具有与单个请求相同的效果,或者它返回的响应代码在后续请求中可能不同,但系统状态在每次都将保持相同。

由于HTTP是无状态协议,因此被规定为安全的GET、HEAD、OPTIONS和TRACE方法也应该是幂等的。

image.png

请求头字段

名称描述示例
Accept响应中可接受的媒体类型。Accept: text/html
Accept-Charset可接受的字符集。Accept-Charset: utf-8
Accept-Datetime可接受的时间版本。Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
Accept-Encoding可接受的编码列表。Accept-Encoding: gzip, deflate
Accept-Language响应中可接受的人类语言列表。Accept-Language: en-US
Cache-Control用于指定在请求-响应链中所有缓存机制都必须遵守的指令。Cache-Control: no-cache
Connection当前连接的控制选项和逐跳请求字段的列表。不得与HTTP/2一起使用。Connection: keep-alive Connection: Upgrade
Content-Encoding数据使用的编码类型。Content-Encoding: gzip
Content-Length请求体的长度(以八位字节为单位)。Content-Length: 348
Content-Type请求体的媒体类型(用于POST和PUT请求)。Content-Type: application/x-www-form-urlencoded
Cookie服务器先前使用Set-Cookie(下文)发送的HTTP cookie。Cookie: $Version=1; Skin=new;

响应报文结构

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close<html><head><title>An Example Page</title></head><body><p>Hello World, this is a very simple HTML document.</p></body>
</html>

服务器向客户端发送的响应消息包括:

  • 一个状态行,包括协议版本,一个空格,响应状态码,另一个空格,可能为空的原因短语,一个回车符和一个换行符,例如:HTTP/1.1 200 OK

  • 零个或多个响应头字段,每个字段包括不区分大小写的字段名,一个冒号,可选的前导空格,字段值,一个可选的尾随空格,并以回车符和换行符结束,例如:

Content-Type: text/html

  • 一个空行,包括一个回车符和一个换行符;
  • 一个可选的消息主体。`

响应状态

在HTTP/1.0及以后的版本中,
HTTP响应的第一行被称为“状态行”,包括一个数字状态码(例如“404”)和一个文本原因短语(例如“Not Found”)。

状态码的第一个数字定义了它的类别:

  • 1XX(信息性):请求已收到,继续处理。
  • 2XX(成功):请求已成功接收、理解并接受。
  • 3XX(重定向):需要进一步采取措施以完成请求。
  • 4XX(客户端错误):请求包含错误的语法或无法满足。
  • 5XX(服务器错误):服务器未能满足显然有效的请求。

响应头字段

Field nameDescriptionExample
Accept-CH请求HTTP客户端提示Accept-CH: UA, Platform
Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Allow-Methods, Access-Control-Allow-Headers指定哪些网站可以参与跨源资源共享Access-Control-Allow-Origin: *
Age对象在代理缓存中存在的时间(以秒为单位)Age: 12
Allow指定资源的有效方法。用于405方法不允许时Allow: GET, HEAD
Content-Encoding数据使用的编码类型。Content-Encoding: gzip
Content-Language所附内容的预期受众的自然语言或语言集合Content-Language: da
Content-Length响应体的长度(以八位字节为单位)Content-Length: 348
Content-Location返回数据的备用位置Content-Location: /index.htm
Content-Type此内容的MIME类型Content-Type: text/html; charset=utf-8

HTTP会话

3次握手

三次握手是TCP(传输控制协议)建立连接的过程。这个过程确保了客户端和服务器之间的可靠通信。三次握手的步骤如下:

三次握手是TCP(传输控制协议)建立连接的过程。这个过程确保了客户端和服务器之间的可靠通信。三次握手的步骤如下:

  1. 第一次握手(SYN)

    • 客户端向服务器发送一个TCP报文,其中设置了SYN(同步)标志位,表明客户端希望建立连接。
    • 客户端选择一个初始序列号(ISN)并包含在这个请求中。
  2. 第二次握手(SYN + ACK)

    • 服务器接收到客户端的SYN请求,并回应一个带有SYN和ACK标志位的TCP报文。
    • 服务器也选择一个初始序列号并包含在这个响应中。
    • 这时,服务器进入半开放状态,表示它已经准备好接受客户端的确认。
  3. 第三次握手(ACK)

    • 客户端接收到服务器的响应后,发送一个带有ACK标志位的TCP报文,表示连接已经建立。
    • 客户端和服务器都确认了对方的序列号,此时连接正式建立,双方可以开始进行数据传输。
      image.png

无状态协议

HTTP协议不存储每次请求的状态.
Q: 那么如何维护用户的信息, 比如账号保持登陆?
A: 使用cookies

Cookies(HTTP Cookies)是一种在客户端和服务器之间传递信息的小型文本文件。它们由服务器在HTTP响应头中的"Set-Cookie"字段创建,并存储在客户端的浏览器中。之后,浏览器每次请求相同的域时都会将这些Cookies信息包含在HTTP请求头中的"Cookie"字段中。

image.png

相关文章:

HTTP概要

文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP&#xff0c;即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…...

128 Linux 系统编程6 ,C++程序在linux 上的调试,GDB调试

今天来整理 GDB 调试。 在windows 上我们使用vs2017开发&#xff0c;可以手动的加断点&#xff0c;debug。 那么在linux上怎么加断点&#xff0c;debug呢&#xff1f;这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到&#xff1a;我们在windows上开发&#xff0c;…...

vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复

1. 问题 ElementUI的form表单&#xff0c;当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度&#xff0c;例如 ‘50px’。作为 Form 直接子元…...

Linux 网络命令指南

目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录&#xff0c;进行远程管理和协作 CentOS / Red Hat&#xff08;使用 firewalld&#xff09; 关闭防火墙 开启防火墙 配置TCP端口&#xff08;假设使用3306端口&#xff…...

vue3组件间的通信,通过props,emit,provide和inject把数据传递N个层级,expose和ref实现父组件调用子组件方法

文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…...

开源免费的NTFS for mac工具mounty

开源免费的NTFS for mac工具mounty 安装依赖 brew install gromgit/fuse/ntfs-3g-macbrew install --cask macfuse安装mounty 如果已经安装macFUSE和ntfs-3g-mac&#xff0c;可以直接点击下载的dmg安装包&#xff0c;安装升级。第一次启动mounty&#xff0c;你需要接受一系列…...

Sora-OpenAI 的 Text-to-Video 模型:制作逼真的 60s 视频片段

OpenAI 推出的人工智能功能曾经只存在于科幻小说中。 2022年&#xff0c;Openai 发布了 ChatGPT&#xff0c;展示了先进的语言模型如何实现自然对话。 随后&#xff0c;DALL-E 问世&#xff0c;它利用文字提示生成令人惊叹的合成图像。 现在&#xff0c;他们又推出了 Text-t…...

4 buuctf解题

[CISCN 2019 初赛]Love Math1 打开题目 题目源码 <?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("…...

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程&#xff0c;需要几个步骤呢&#xff1f; 1、添加线程组2、添加HTTP请求3、添加监听器&#xff0c;查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…...

视频怎么变成gif动图?一招教你在线转换

MP4是一种常见的视频文件格式&#xff0c;它可以包含音频和视频数据&#xff0c;并支持高质量的视频压缩。MP4视频可以呈现连续的动态效果&#xff0c;可以包含平滑的运动、音频等多媒体元素。而GIF动图是由一系列静态图像组成的&#xff0c;通过快速连续播放这些帧来创造出动态…...

Leetcode2583. 二叉树中的第 K 大层和

Every day a Leetcode 题目来源&#xff1a;2583. 二叉树中的第 K 大层和 解法1&#xff1a;层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和&#xff0c;保存在数组 levelSum 中。然后将数组进行排序&#xff0c;返回第 k 大的值。需要考虑数组长度小于 k 的边…...

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0...

CSS 面试题汇总

CSS 面试题汇总 1. 介绍下 BFC 及其应 参考答案&#xff1a; 参考答案&#xff1a; 所谓 BFC&#xff0c;指的是一个独立的布局环境&#xff0c;BFC 内部的元素布局与外部互不影响。 触发 BFC 的方式有很多&#xff0c;常见的有&#xff1a; 设置浮动overflow 设置为 auto、scr…...

定制你的【Spring Boot Starter】,加速开发效率

摘要&#xff1a; 本文将介绍如何创建一个自定义的 Spring Boot Starter&#xff0c;让您可以封装常用功能和配置&#xff0c;并在多个 Spring Boot 项目中共享和重用。 1. 简介 Spring Boot Starter 是 Spring Boot 框架中的一种特殊的依赖项&#xff0c;它用于快速启动和配置…...

Vue源码系列讲解——生命周期篇【二】(new Vue)

目录 1. 前言 2. new Vue()都干了什么 3 . 合并属性 4. callHook函数如何触发钩子函数 5. 总结 1. 前言 上篇文章中介绍了Vue实例的生命周期大致分为4个阶段&#xff0c;那么首先我们先从第一个阶段——初始化阶段开始入手分析。从生命周期流程图中我们可以看到&#xff…...

JavaScript 设计模式之观察者模式

观察者模式 观察者模式又被称为发布-订阅模式&#xff0c;使用一个对象来收集订阅者&#xff0c;在发布时遍历所有订阅者&#xff0c;然后将信息传递给订阅者&#xff0c;可以这样来实现一个简单的模式 const Observable (function () {let __messages {}return {register:…...

数据结构D4作业

1.实现单向循环链表的功能 loop.c #include "loop.h" loop_p create_loop() { loop_p H(loop_p)malloc(sizeof(loop)); if(HNULL) { printf("创建失败\n"); return NULL; } H->len0; H->nextH; ret…...

springboot750人职匹配推荐系统

springboot750人职匹配推荐系统 获取源码——》公主号&#xff1a;计算机专业毕设大全...

【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…...

Redis篇之缓存雪崩、击穿、穿透详解

学习材料&#xff1a;https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时&#xff0c;会把数据库中的数据缓存至redis中&#xff0c;避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...