【HTTP三个基础问题】

面试官您好!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.pswp.cn/diannao/86133.shtml

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

相关文章

NLP中的input_ids是什么?

在自然语言处理(NLP)中,input_ids 是什么 在自然语言处理(NLP)中,input_ids 是将文本转换为模型可处理的数字表示后的结果,是模型输入的核心参数之一。 一、基本概念 文本数字化 原始文本(如 “Hello world!”)无法直接被模型处理,需要通过分词器(Tokenizer) 将其…

⚡️ Linux Docker 基本命令参数详解

🐳 Linux Docker 基本命令参数详解 📘 1. Docker 简介 Docker 是一个开源的容器化平台,它通过将应用及其依赖打包到一个轻量级、可移植的容器中,从而实现跨平台运行。Docker 采用 C/S 架构,服务端称为 Docker Daemon&a…

Spring IoC 模块设计文档

注:码友们,我们是从设计的角度一步步学习和分解Spring;所以不要一上来就想看源码,也不需要关心Spring具体加载进去的;我们只封装工具(如IoC),至于调用,暂时不用考虑&…

Linux(生产消费者模型/线程池)

目录 一 生产消费者模型 1. 概念: 2. 基于阻塞队列的生产消费者模型: 1. 对锁封装 2. 对条件变量封装 二 信号量(posix) 1. 概念 2. API 3. 基于环形队列的生产消费者模型 三 线程池 1. 概念 2. 示例 四 补充字段 1. 可重入函数 VS 线程安…

无线网络扫描与分析工具 LizardSystems Wi-Fi Scanner 25.05

—————【下 载 地 址】——————— 【​本章下载一】:https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【​本章下载二】:https://pan.xunlei.com/s/VOS4QQ9APt3FgFQcxyArBiZlA1?pwdi4du# 【百款黑科技】:https://uc…

Java Map完全指南:从基础到高级应用

文章目录 1. Map接口概述Map的基本特性 2. Map接口的核心方法基本操作方法批量操作方法 3. 主要实现类详解3.1 HashMap3.2 LinkedHashMap3.3 TreeMap3.4 ConcurrentHashMap 4. 高级特性和方法4.1 JDK 1.8新增方法4.2 Stream API结合使用 5. 性能比较和选择建议性能对比表选择建…

[最全总结]城市灾害应急管理系统

城市灾害应急管理集成系统 | 国家重点研发政府间合作项目 Vue+ElementUI+Bpmn+Cesium+Java SpringBoot 项目描述 在智慧城市战略背景下,项目面向内涝、团雾和火灾等灾害,开发了集灾害模型集成模拟、场景可视化与应急预案管理于一体的系统,系统各子模块进行软件功能测试,测…

QtWidgets模块功能及架构解析

QtWidgets 是 Qt 框架中用于创建传统桌面应用程序图形用户界面(GUI)的核心模块。在 Qt 6.0 中,QtWidgets 模块继续提供丰富的 UI 组件和功能,尽管 Qt 正在向 QML 方向演进,但 QtWidgets 仍然是许多桌面应用程序的基础。 一、主要功能 基础窗…

grep、wc 与管道符快速上手指南

🎯 Linux grep、wc 与管道符快速上手指南:从入门到实用 📅 更新时间:2025年6月7日 🏷️ 标签:Linux | grep | wc | 管道符 | 命令行 文章目录 前言🌟 一、grep、wc 和管道符简介1.核心功能2.核心…

C++11 右值引用:从入门到精通

文章目录 一、引言二、左值和右值(一)概念(二)区别和判断方法 三、左值引用和右值引用(一)左值引用(二)右值引用 四、移动语义(一)概念和必要性(二…

java复习 04

心情复杂呢,现在是6.7高考第一天,那年今日此时此刻我还在考场挣扎数学,虽然结果的确很糟糕,,现在我有点对自己生气明明很多事情待办确无所事事没有目标,不要忘记曾经的自己是什么样子的,去年今日…

从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)

概述 在软件开发中,自动化测试是确保代码质量的重要方式。而 Pytest 是一个功能强大且易于上手的 Python 测试框架,非常适合初学者入门。 本文将带你一步步完成: 安装和配置 Pytest在 PyCharm 中搭建一个清晰的测试项目结构 准备工作 在…

用电脑通过网口控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点: 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比,使用 14 位模数转换器 (ADC) 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS 本底噪声的较小信号。使用独有区域触摸在几秒…

Java Smart 系统题库试卷管理模块设计:从需求到开发的实战指南

在教育信息化不断推进的背景下,高效的题库及试卷管理系统至关重要。Java Smart 系统中的题库及试卷管理模块,旨在为教师提供便捷的试题录入、试卷生成与管理功能,同时方便学生在线练习与考试。本文将详细介绍该模块的设计思路与核心代码实现。…

PDF图片和表格等信息提取开源项目

文章目录 综合性工具专门的表格提取工具经典工具 综合性工具 PDF-Extract-Kit - opendatalab开发的综合工具包,包含布局检测、公式检测、公式识别和OCR功能 仓库:opendatalab/PDF-Extract-Kit特点:功能全面,包含表格内容提取的S…

git小乌龟不显示图标状态解决方案

第一步 在开始菜单的搜索处,输入regedit命令,打开注册表。 第二步 在注册表编辑器中,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 这一项。 第三步 让Tortoise相关的项目排在前…

Windows平台RTSP/RTMP播放器C#接入详解

大牛直播SDK在Windows平台下的RTSP、RTMP播放器模块,基于自研高性能内核,具备极高的稳定性与行业领先的超低延迟表现。相比传统基于FFmpeg或VLC的播放器实现,SmartPlayer不仅支持RTSP TCP/UDP自动切换、401鉴权、断网重连等网络复杂场景自适应…

题海拾贝:P1091 [NOIP 2004 提高组] 合唱队形

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

Python控制台输出彩色字体指南

在Python开发中&#xff0c;有时我们需要在控制台输出彩色文本以提高可读性或创建更友好的用户界面。本文将介绍如何使用colorama库来实现这一功能。 为什么需要彩色输出&#xff1f; 提高可读性&#xff1a;重要信息可以用不同颜色突出显示更好的用户体验&#xff1a;错误信息…

chili3d 笔记17 c++ 编译hlr 带隐藏线工程图

这个要注册不然emscripten编译不起来 --------------- 行不通 ---------------- 结构体 using LineSegment std::pair<gp_Pnt, gp_Pnt>;using LineSegmentList std::vector<LineSegment>; EMSCRIPTEN_BINDINGS(Shape_Projection) {value_object<LineSegment&g…