【计算机网络】应用层协议--HTTP协议及HTTP报文格式

news2024/12/23 12:53:03

目录

1、HTTP是什么

2、HTTP请求与响应

3、HTTP请求的两种方法(get和post)及区别 (面试题)

4、几种常见的错误的说法

5、HTTP协议的特点

6、应用场景

7、HTTP报文格式

8、面试题:HTTP常见的状态码都有哪些?


1、HTTP是什么

HTTP协议是在Web上进行数据交换的基础,是一种“客户端-服务器端”(B/S 架构)协议。作用于应用层。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP 是一个简单的请求/响应协议,通常运行在 TCP(Transmission Control Protocol 的简称,是一种面向连接的、可靠的、基于字节流的传输层通信协议)之上。HTTP 协议指定了客户端能够发送什么样的消息给服务端,以及服务端要做出怎样的响应。服务器会默认监听 TCP 协议的 80 端口,当然后期您也可以修改为其它端口。

HTTP 协议为计算机之间的通信提供了一种标准和规范,它规定了:

  • 如何构造客户端的请求数据(也称报文);
  • 如何将请求数据发送到服务器;
  • 服务器端如何响应客户端的请求。

2、HTTP请求与响应

客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。

  • 由像浏览器这样的客户端发出的消息叫做请求( requests )
  • 被服务端回应的消息叫做响应( responses)

3、HTTP请求的所有方法:

  • HTTP1.0 : 三种:post,get,head
  • HTTP1.1:  八种:post,get,head,options,put,delete,trance,connect

4、HTTP请求的两种方法(get和post)及区别 (面试题)

区别:其实本质上没有太大区别,但非要说个区别,如下:

  1. get请求一般用来请求获取数据,post请求一般作为发送数据到后台,传递数据,创建数据。例如登录,上传等。
  2. get请求也可以传参到后台,但是传递的参数则显示在地址栏,安全性低,且参数的长度也有限制(2048字符),post请求则是将传递的参数放在request body中,不会在地址栏显示,安全性比get请求高,参数没有长度限制
  3. get请求刷新浏览器或者回退没有影响,post请求则会重新请求一遍
  4. get请求可以被缓存,也会保留在浏览器的历史记录中,post请求不会被缓存,也不好保留在浏览器的历史记录中
  5. get请求通常是通过url地址请求,post常见的则是form表单请求
  6. get产生一个tcp数据包,post产生两个tcp数据包
  7. get产生的URL地址可以被Bookmark,而post不可以
  8. get请求会被浏览器主动cache(缓存),而post不会,除非手动设置
  9. 对参数的数据类型,get只接受ASCII字符,而post没有限制。
  10. get比post更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  11. GET 和 POST都是http请求方式, 底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),
  12. 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据)表示成功;而对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服务器响应 200 (返回数据)。

5、几种常见的错误的说法

1.get请求能传递的数据量有限,post传递的数据量没有上限。

  • 但是标准文档中并没有明确规定URL有多长。

2.get请求数据不安全,post请求数据更安全。

  • 依据是:若使用get实现登录操作,用户名和密码会暴露在URL中,也就是地址栏里。人们可以看到。而使用post操作则是把用户名和密码放在body中,不会在地址栏里显示。
  • 但其实这种说法也是有问题的,所谓的安全是是指不容易被黑客获取,或者是获取之后不容易被破解。

3.get只能给服务器传输文本数据,post可以给服务器传输文本和二进制数据。

  • get也是可以传输二进制数据的。

4.get请求是幂等的,post请求不是幂等的。

  • 这里的幂等指的是输入相同的内容,输出是稳定的。这种说不也不完全对。

6、HTTP协议的特点

1) 简单快速

  • HTTP 协议支持客户端、服务器端模式,简单快速,当客户端向服务器端发送请求时,只需要传送请求方法和路径即可,常用的请求方法有 GET、HEAD、POST 等,每种方法都定义了客户端与服务器之间不同的信息交换方式。

2) 灵活

  • HTTP 允许传输任意类型的数据对象,包括音频、视频、图片、文本等等。

3) 无连接

  • HTTP 是无连接的,当服务器接受到来自客户端的请求后,会按顺序依次处理这些请求,处理完成一个就关闭一个,然后开始处理下一个请求。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户端的请求,并收到客户端的应答后,随即断开连接,采用这种方式可以节省传输时间。

4) 无状态

  • HTTP 协议是无状态协议,无状态是指协议对于信息的处理没有记忆能力。也就是说来自同一个客户端的多个请求之间没有上下文关系,每次的请求都是独立的,一次请求的执行情况和结果与它前面的请求或后面的请求没有直接关系。
  • 服务器中并不会保存客户端的状态,也就意味着如果后续处理中需要用到前面的信息,那么您就需要将它重新发送到服务端,这样可能会导致每次连接传送的数据量增大。但从另一方面来讲,如果服务器不需要先前信息时它的响应就会比较快。
     

7、应用场景

(1)网页和后台服务器的交互。

(2)app和后台服务器的交互。


8、HTTP报文格式

HTTP报文,又称为HTTP消息,是服务器和客户端之间交换数据的方式。有两种类型的消息︰请求,由客户端发送用来触发一个服务器上的动作;响应,来自服务器的应答。

8.1 请求

请求报文由以下元素组成:一个HTTP的method、要获取的资源的路径、HTTP协议版本号、为服务端表达其他信息的可选头部headers以及对于一些像POST这样的方法。具体格式如下:

  1. 首行:方法 URL 版本号
  2. 请求头(header)键值对形式
  3. 空行
  4. 正文(body)

 接下来主要说说请求里的响应header。 

  • Host  : 表示服务器主机的地址和端口。
  • Content-Length : 表示body中的数据长度,前提是请求里有body。
  • Content-Type:表示请求的body中的数据格式,前提是请求里有body。
  • User-Agent:描述了使用啥设备上网(操作系统版本及浏览器版本),可以去区分是PC端还是手机端。
  • Referer:表示当前页面是从那个页面跳转过来的。
  • cookie:由于HTTP是无状态的。没有记忆的。但在某些场景中,我们希望有些数据可以被重复使用,比如登录操作的用户名和密码。于是产生了一种会话技术,存储一些信息到浏览器中。它由服务器产生,响应中携带cookie,并且要求保存在客户端(通常指浏览器)。
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
  • ...............

通常情况下,get请求没有body,post请求有body。


为什么要有空行和Content-Length?

目的是为了解决粘包问题。因为HTTP也是基于TCP的,TCP是以字节为单位传输的,传过去之后,接收方数据包都紧挨在一起,接收方也识别不出哪到哪是body,这样就需要用空行来区分body,再用content-Length来区分body中数据的长度。
 


8.2 响应

响应报文由以下元素组成:HTTP协议版本号、一个状态码、一个状态信息、HTTPheaders以及包含获取的资原body。

  1. 首行:版本号 状态码  状态码信息
  2. 响应头(header)键值对形式
  3. 空行
  4. 正文(body)


Content-Type的作用:

返回此次响应的数据格式。

请求有json,form表单的格式,from-data的格式。

响应有html,css,js,json,图片,text等数据格式。


9、面试题:HTTP常见的状态码都有哪些?

状态码:服务器的响应,表示了这次请求对应的响应是啥样的状态。

  • 2开头的表示成功,其中200最常见。
  • 3开头的表示重定向,比如我访问某个网址,他就会让我访问另一个网址,并在响应报文中携带这个新的网址。301是永久重定向,302是临时重定向。
  • 4开头的是请求有误,比如网址输入错误等,其中404表示访问资源在服务器上不存在。403表示访问没有权限,禁止访问。
  • 5开头的是服务器出错。

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

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

相关文章

Day08File类IO流字符集

File:代表文本和文件夹 File类只能对文件本身进行操作,不能读写文件里面存储的数据。 创建File类的对象 路径写法 绝对路径:从盘符开始 File file new File(“D:\\ceshi\\a.txt”); 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件 F…

Ubuntu 安装 npm 和 node

前言 最近学习VUE,在ubuntu 2204 上配置开发环境,涉及到npm node nodejs vue-Cli脚手架等内容,做以记录。 一、node nodejs npm nvm 区别 ? node 是框架,类似python的解释器。nodejs 是编程语言,是js语言的…

[AUTOSAR][诊断管理][ECU][$19] 读取ECU的DTC故障信息

一、简介 在车载诊断中常用的诊断协议有ISO 14229等,在协议中主要定义了诊断请求、诊断响应的报文格式及ECU该如何处理诊断请求的应用。其中ISO 14229系列标准协议定义了用于行业内诊断通信的需求规范,也就是UDS。UDS主要应用于OSI七层模型的第七层——…

LInux系统编程(3)

取得拓展属性 #include <sys/types.h> #include <attr/xattr.h>ssize_t getxattr(const char* path, const char* key, void* value, size_t size); ssize_t lgetxattr(const char* path, const char* key, void* value, size_t size); ssize_t fgetxattr(int fd,…

FreeRTOS 任务的创建与删除

目录 1. 什么是任务&#xff1f; 2. 任务创建与删除相关函数 任务创建与删除相关函数有如下三个&#xff1a; 任务动态创建与静态创建的区别&#xff1a; xTaskCreate 函数原型​编辑 vTaskDelete 函数原型 3. 创建两个任务进行点灯实操 使用CubeMX快速移植 1.增加两个…

【谢希尔 计算机网络】第4章 网络层

目录 网络层 网络层的几个重要概念 网络层提供的两种服务 网络层的两个层面 网际协议 IP 虚拟互连网络 IP 地址 IP 地址与 MAC 地址 地址解析协议 ARP IP 数据报的格式 IP 层转发分组的过程 基于终点的转发 最长前缀匹配 使用二叉线索查找转发 网际控制报文协议…

2023CSPS 种树 —— 二分+前缀和

This way 题意&#xff1a; 一开始以为是水题&#xff0c;敲了一个二分贪心检查的代码&#xff0c;20分。发现从根往某个节点x走的时候&#xff0c;一路走来的子树上的节点到已栽树的节点的距离会变短&#xff0c;那么并不能按照初始情况贪心。 于是就想着检查时候用线段树…

2023-1024‍节日(内含表白代码)

文章目录 一、前言二、代码实现三、动态展示四、总结 一、前言 1024可以是计算机操作系统的进制单位&#xff0c;也可以是&#x1f9d1;‍&#x1f4bb;程序员们的特殊纪念日。 每年10月24日被行业认定为“程序员节”。 今天&#xff0c;正是一年一度的“1024程序员节”在此纪…

LeetCode讲解篇之面试题 01.08. 零矩阵

文章目录 题目描述题解思路题解代码 题目描述 题解思路 遍历矩阵&#xff0c;若当前元素为零&#xff0c;则将该行和该列的第一个元素置零 遍历第一行&#xff0c;若当前元素为零&#xff0c;则将当前列置零 遍历第一列&#xff0c;若当前元素为零&#xff0c;则将当前行置零 …

Kong:高性能、插件化的云原生 API 网关 | 开源日报 No.62

Kong/kong Stars: 35.2k License: Apache-2.0 Kong 是一款云原生、平台无关且可扩展的 API 网关。它以高性能和插件化的方式脱颖而出&#xff0c;提供了代理、路由、负载均衡、健康检查和认证等功能&#xff0c;并成为编排微服务或传统 API 流量的中心层。 以下是 Kong 的核心…

浏览器面试题及答案【集合目录】

前言&#xff1a; 欢迎浏览和关注本专栏《 前端就业宝典 》&#xff0c; 不管是扭螺丝还是造火箭&#xff0c; 多学点知识总没错。 这个专栏是扭螺丝之上要造火箭级别的知识&#xff0c;会给前端工作学习的小伙伴带来意想不到的帮助。 本专栏将前端知识拆整为零&#xff0c;主要…

kr第三阶段(二)32 位汇编

编译与链接 环境配置 masm32 masm32 是微软的 masm32 的民间工具集合。该工具集合除了 asm32 本身的汇编器 ml 外还提供了&#xff1a; SDK 对应的函数声明头文件和 lib 库。32 位版本的 link&#xff08;原版本是 16 位&#xff0c;这里的 32 位版本的 link 来自 VC 6.0&a…

IDEA工具第二篇:自定义Java方法注释模板 | 京东云技术团队

网上搜索类似的文章有很多&#xff0c;但是一味的复制粘贴总会出现各种奇葩问题&#xff0c;最后然并卵&#xff01;今天特意自己研究琢磨一下&#xff0c;将最终结果分享给大家&#xff0c;100%亲测可用。 一、说明 想必大家都用过Eclipse的方法注释生成&#xff0c;方法上输…

Django结合Celery进行异步调用

目录 Celery介绍 相关环境 相关配置 1、在proj/proj/目录下创建一个新的celery.py模块 定义 Celery 实例&#xff1a; 2、在proj/proj/__init__.py 模块中导入这个应用程序。 3、在各自模块中定义任务文件tasks.py 4、settings.py配置 服务启动 异步调用 Celery介绍 C…

ChatGPT AIGC 办公自动化拆分Excel工作表

在职场办公中对数据的操作,经常需要将一份表格数据拆分成多个表。 但是在Excel中进行表格拆分的步骤比较多。 在Excel中拆分工作表的步骤: 1.打开您的Excel工作簿,选择您要拆分的工作表。 2.右键单击工作表标签(通常在底部),选择“移动或复制”。 3.在“移动或复制”…

SpringCloud和Kubernetes的区别

又见小道仙&#xff1a; https://blog.csdn.net/Tomwildboar/article/details/129531315 对于SpringCloud在实际项目中并未使用过&#xff0c;只是自学过SpringCloud和SpringCloud Alibaba&#xff0c;也基于学习搭建过demo。 对于Kubernetes&#xff0c;目前这家公司就是使用…

SpringBoot引入包报红,无法使用Maven依赖

今天又是一年一度的程序员节&#xff0c;希望各位编码的小伙伴们能够健健康康&#xff0c;开开心心。 最近弄了一个SpringBoot项目&#xff0c;今天拉取代码的时候发现文件都变成了这样子 平时常用的依赖包都用不了了&#xff0c;重新加载&#xff0c;重新install都无效&#…

浏览器标签上添加icon图标;html引用ico文件

实例 <link rel"shortcut icon" href"./XXX.ico" type"image/x-icon">页面和图标在同一目录内 则 <link rel"shortcut icon" type"text/css" href"study.ico"/>可以阿里矢量图库关键字搜索下载自己…

【tg】9 : InstanceImpl 、 虚拟的音频渲染设备FakeAudioDeviceModuleImpl

代码分布 WebRTC-Manager 线程:manager线程 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\InstanceImpl.h Manager 使用的是 WebRTC-Manager 线程 InstanceImpl 对Manager 的封装和调用 #

【ESP-BOX-LITE】:照片查看器

目录 项目场景&#xff1a; 项目需求描述&#xff1a; 项目技术&#xff1a; 项目成果&#xff1a; 项目总结&#xff1a; 项目视频&#xff1a; 芳香 项目场景&#xff1a; 使用ESP-BOX-LITE实现照片查看器功能&#xff0c;显示多级目录下的图片或文件夹&#xff0c;自…