【HTTP三个基础问题】

news2025/6/12 16:41:30

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客户端-服务器模型,一次完整的HTTP通信包含客户端发起请求到服务器响应的全过程。

首先来看客户端发起的HTTP请求报文。请求报文由客户端(比如浏览器、App)向服务器发起,主要由四个部分构成:请求行、请求头、空行和请求体。

第一部分是请求行,主要功能是说明客户端对服务器资源执行的操作。它由方法(Method)、资源路径(Resource Path)、HTTP版本三个部分构成,每部分用空格隔开。

  • 请求方法定义操作类型,比如常见的GET用于获取资源(像浏览器访问网页),POST用于提交数据(如登录时发送账号密码)。
  • **URI(统一资源标识符)**即资源路径,标识请求针对的资源,例如/api/user指向用户数据接口。
  • HTTP版本常见的有1.1、2.0等,例如HTTP/1.1表示使用该版本的通信规则。

第二部分是请求头,由多行key:value键值对组成,每行以回车换行(\r\n)符号分割,类似快递单上的额外备注信息,传递请求的附加信息。常见字段包括:

  • User-Agent:告诉服务器客户端类型(如Chrome浏览器或手机App),方便服务器返回适配内容。
  • Content-Type:说明请求体的数据格式,比如application/json表示请求体是JSON数据。
  • Host:请求的服务器域名,用于区分同一IP下的不同站点。
  • Accept:客户端能处理的媒体类型,如text/html表示可接收网页内容。
  • Accept-Encoding:客户端支持的内容编码,如gzip表示可接收压缩数据。
  • Authorization:用于身份验证的凭证(如登录令牌),服务器通过它识别用户权限。
  • Cookie:客户端存储的会话信息(如登录态),服务器通过它维持用户会话。
    每行\r\n的作用像表格换行,确保每个键值对独立清晰。

第三部分是空行,仅有一个\r\n,是请求头部和请求正文的分隔符,明确划分不同区域的界限。

第四部分是请求正文,存放客户端提交的数据,格式灵活,可以是普通字符串、JSON、XML等。例如登录时提交的账号密码(JSON格式)、上传文件的二进制数据,都通过请求正文传递给服务器,GET请求通常没有请求体。

服务器收到请求后,会返回响应报文,响应报文同样包含四个部分:

第一部分是状态行,格式为协议版本+状态码+状态短语,例如HTTP/1.1 200 OK

  • 状态码是核心反馈结果:2xx表示成功(如200 OK),3xx表示重定向(如302 Found),4xx表示客户端错误(如404 Not Found资源不存在),5xx表示服务器错误(如500 Internal Server Error)。

第二部分是响应头,也是多行key:value键值对,传递结果附加信息。例如:

  • Content-Type:响应体的数据类型(如application/json表示接口返回JSON数据)。
  • Cache-Control:缓存策略(如max-age=3600表示客户端可缓存响应1小时)。
  • Set-Cookie:服务器给客户端设置的Cookie(如登录态),用于维持会话。
  • Access-Control-Allow-Origin:跨域资源共享策略(如*表示允许所有域名跨域访问)。

第三部分是空行,同样用\r\n分隔响应头和响应体。

第四部分是响应体,是服务器返回的核心数据,可能是HTML页面代码、JSON接口结果、图片/视频二进制数据等。例如访问网页时,响应体包含HTML代码,浏览器解析后渲染页面。

二、HTTP有哪些请求方式?

面试官您好!HTTP请求方式是客户端对服务器资源的操作指令,不同方法对应不同语义,可按功能分为三类,同时涉及安全性和幂等性概念。

先明确两个核心概念

  • 安全性:是否会修改服务器资源状态(“读操作”安全,“写操作”不安全)。
  • 幂等性:多次执行同一请求,服务器资源状态是否一致(幂等方法结果不变,非幂等可能改变)。
(一)读操作(安全、幂等)
  1. GET

    • 用途:获取资源(查数据),如浏览器访问网页GET https://www.example.com或API查列表GET /api/articles
    • 特点:参数拼在URL(如?id=123),可缓存、易分享,但敏感数据易暴露(如密码不能用GET传递)。
    • 安全/幂等:安全(仅读取)、幂等(多次请求结果一致)。
  2. HEAD

    • 用途:仅获取响应头(不返回正文),用于检查资源元数据(如HEAD /file.zip查看文件是否存在、大小)。
    • 特点:轻量高效,常做“预检”(如下载大文件前确认信息)。
    • 安全/幂等:安全(仅读头)、幂等(多次请求头信息不变)。
(二)写操作(非安全,部分幂等)
  1. POST

    • 用途:提交数据创建资源(写操作),如登录表单POST /api/login、上传文件。
    • 特点:数据放请求体(相对隐蔽),但非幂等(多次提交可能创建多条数据,如重复下单)。
    • 安全/幂等:非安全(修改状态)、非幂等。
  2. PUT

    • 用途:全量更新资源(替换数据),如修改用户资料PUT /api/user/123(需传完整信息)。
    • 特点:幂等(多次用相同数据更新,结果一致)。
    • 安全/幂等:非安全(修改状态)、幂等。
  3. PATCH

    • 用途:局部更新资源(修改部分字段),如改用户昵称PATCH /api/user/123(仅传{"nickname":"new"})。
    • 特点:灵活高效,但非幂等(多次调用持续修改,如多次“积分+10”)。
    • 安全/幂等:非安全、非幂等。
  4. DELETE

    • 用途:删除资源,如删订单DELETE /api/order/123
    • 特点:幂等(多次删除结果一致,资源已删除)。
    • 安全/幂等:非安全、幂等。
(三)控制操作(安全、幂等)
  1. OPTIONS
    • 用途:查询服务器支持的方法,常用于跨域预检(如前端发POST前,浏览器自动发OPTIONS询问权限)。
    • 特点:无实际业务逻辑,仅协商规则。
    • 安全/幂等:安全(不修改状态)、幂等。

实际场景选择:遵循RESTful规范,查数据用GET,创建用POST,全量更新用PUT,局部更新用PATCH,删除用DELETE。例如电商系统中,查商品用GET,下单用POST,改地址用PUT,删订单用DELETE,语义清晰且符合规范。

三、GET请求和POST请求的区别

面试官您好!GET和POST是最常用的HTTP方法,核心区别体现在用途、数据传递、安全、幂等性等方面,结合场景选择能避免设计误区。

(一)五大核心差异
维度GETPOST
核心用途读资源(查数据,如查商品详情)写资源(提交数据,如下单、登录)
数据位置拼在URL(如?keyword=手机放请求体(如JSON格式的账号密码)
安全性低(参数暴露在URL,易被记录)中(数据在体内,但HTTP不加密)
幂等性幂等(多次请求结果一致)非幂等(多次提交可能重复创建)
缓存支持可缓存(浏览器自动存URL响应)默认不缓存(需显式设置)
(二)逐场景解析
  1. 用途与数据传递

    • GET适合读操作,如浏览网页GET https://example.com/article/123,参数在URL清晰可见,适合公开场景(如搜索关键词)。
    • POST适合写操作,如登录POST /api/login,账号密码放请求体,避免暴露在URL(但需配合HTTPS加密才安全)。
  2. 安全性对比

    • GET的URL参数会被浏览器历史、服务器日志记录,公共网络下传敏感数据(如密码)风险极高。
    • POST的数据在请求体,抓包工具虽能截取,但配合HTTPS加密(TLS层)可保障安全(如电商支付场景必须用POST+HTTPS)。
  3. 幂等性与缓存

    • GET幂等,多次刷新商品详情页不会改变服务器数据;POST非幂等,重复提交订单会生成多个记录。
    • GET响应可被浏览器缓存,提升性能(如新闻列表页);POST默认不缓存,因写操作结果可能每次不同。
(三)典型场景选择
  • 选GET:查公开数据(如商品搜索)、需缓存的页面(如静态资源)、支持书签分享的场景(如文章链接)。
  • 选POST:提交敏感数据(如登录、支付)、传大量数据(如上传文件)、改变服务器状态的操作(如发布评论)。

反例提醒:避免用GET传密码(URL暴露风险),也不建议用POST做查询(违背语义,团队协作易困惑)。遵循HTTP方法的设计初衷,能让接口更健壮、易维护。

总结

HTTP报文结构是通信的“骨架”,请求方法是操作的“灵魂”,GET/POST的差异则是实际开发的“指南针”。理解这些细节,不仅能应对面试,更能在实际项目中设计出高效、安全的接口,例如通过请求头缓存控制提升性能,或用HTTPS+POST保障敏感数据传输。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…

SpringTask-03.入门案例

一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…

网络编程(UDP编程)

思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如&#xff1a…

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…