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

目录

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请求的两种方法(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 (返回数据)。

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

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

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

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

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

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

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

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

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

5、HTTP协议的特点

1) 简单快速

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

2) 灵活

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

3) 无连接

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

4) 无状态

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

6、应用场景

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

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


7、HTTP报文格式

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

7.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表示当前页面是从那个页面跳转过来的。

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


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

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


7.2 响应

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

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


Content-Type的作用:

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

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

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


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

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

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

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

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

相关文章

C# 关于托管调试助手 “FatalExecutionEngineError“:“运行时遇到了错误。解决方案

托管调试助手 “FatalExecutionEngineError”:“运行时遇到了错误。此错误的地址为 0x740161f8,在线程 0x1174 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 …

微信native-v3版支付对接流程及demo

1.将p12证书转为pem证书,得到商户私钥 openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes 密码是:商户id 2.将获取到的apiclient_cert.pem证书,复制出这一块内容,其他的不要 3.下载这个工具包 https://gi…

macOS Sonoma 桌面小工具活学活用!

macOS Sonoma 虽然不算是很大型的改版,但当中触目的新功能是「桌面小工具」(Widget)。如果我们的萤幕够大,将能够放更多不同的Widget,令用户无须开App 就能显示资讯,实在相当方便。 所有iPhone Widget 也能…

openCV的CUDA GPU 版本安装 (Ubuntu windows 通用)

需要做template match, 比较注重时间,因此opencv 的普通版本不适用。需要用GPU 的。 下载 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git确保准备好以下内容 1: visual studio &#xff0…

硬件信息查看工具 EtreCheckpro mac中文版功能介绍

etrecheckpro mac中文版是一款专业的硬件信息查看工具,它能够快速的检测Mac电脑的软硬件信息,加强用户对自己计算机的了解,EtreCheckPro for Mac下载首先会对电脑的软硬件信息进行扫描收集,之后才会显示出来。EtreCheck Mac版报告…

顶级玩家:一招搞定 App 自动化老大难问题

很多人在学习 App 自动化或者在项目中落地实践 App 自动化时,会发现编写的自动化脚本无缘无故的执行失败、不稳定。 而导致其问题很大原因是因为应用的各种弹窗(升级弹窗、使用过程提示弹窗、评价弹窗等等),比如这样的&#xff1a…

汽车屏类产品(二):360全景环视(SVC)、多分割显示、行车记录

前言 随着新能源汽车的快速发展,带动了车载器件的大发展,大的比如域控,小的创新更是不断涌现。而车载显示屏可以说是一大类产品,产品形态也是愈发多样化,比如:仪表cluster、中控IVI、副驾屏、行车记录仪、流媒体后视镜、透明A柱屏、方向盘屏(替代方向盘按键)、门饰板显…

在mybatis的xml中使用枚举来做判断条件

1.枚举类 import com.baomidou.mybatisplus.annotation.IEnum; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.shinkeer.common.utils.StringUtils;import java.util.HashMap; import java.util.Map;…

服务器数据恢复-raid0硬盘故障导致服务器崩溃的数据恢复案例

服务器故障&分析: 某公司一台服务器,共2块磁盘组建了一组raid0磁盘阵列。RAID0阵列中有1块硬盘出现故障离线,导致服务器崩溃。 通过和用户方的沟通,北亚企安数据恢复工程师初步判断:故障服务器中出现故障离线的硬盘…

账号合租平台源码Thinkphp6.1|内置详细搭建教程

小白账号合租平台说明 系统采用的是常见的租号平台模式,现在网络上流出的这种类型的源码还很少 平台介绍 1.租号模式,用户可自行选择单独租号或采用合租的模式。 2.支付,采用易支付通用接口 3.邀请返利,为了站长能更好推广推荐了邀请返利功能 4.用户提现功能 5.工单…

让你随时随地访问金蝶云星空企业版v8.0,内网穿透轻松实现远程办公!

文章目录 前言1. 金蝶云星空企业版v8.0安装下载1.1 登录金蝶官网下载安装包1.2 常见的安装下载问题 2. 金蝶云星空配置SQL Sever数据库2.1 创建数据管理中心2.2 创建完成后在服务器登录管理站点 3. 下载安装注册cpolar3.1 公网访问测试 4. 固定连接公网地址 前言 金蝶云星空专注…

光环云入选“北京市算力互联互通试点参与企业”!

为进一步贯彻落实工业和信息化部等六部委联合印发的《算力基础设施高质量发展行动计划》,扩大北京市算力互联互通试点参与范围,助力建设全球数字经济标杆城市,北京市通信管理局组织相关专家对申报第二批参与试点企业开展评估,光环…

云HIS系统,Cloud HIS system,云HIS医院信息管理系统源码

通过云HIS平台,可以减少医院投资,无需自建机房和系统,快速实现信息化服务。系统升级及日常维护服务有云平台提供,无需配备专业IT维护人员进行系统维护。 一、his系统和云his系统的区别 His系统和云his系统是两种不同的计算平台,它们在技术架构上存在很大的差异。下…

HypeX Labs:充分释放加密资产的潜力

加密货币通常被视为是资产类别或投资工具,不过其代表了一种全新的意识形态,且与传统资产有着完全不同的底层价值逻辑,所以它们不仅可以被视为一种资产类别或投资工具,在大多数情况下可以被视为一种基于技术的实现。因此我们可以认…

1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术

🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 1024程序员狂欢节有好礼 🚩🚩🚩点击直达福利前言一、IT技术 IT Technology《速学Linux:系统应用从入门到精通》《Pytho…

k8s-----10、Controller-Deployment

Controller-Deployment 1、什么是controller2、 pod和controller关系3、Deployment控制器应用场景3.1 部署时yaml文件书写3.2 实际部署应用3.3 升级回滚3.3.1 升级3.3.2 回滚 3.4 弹性伸缩 1、什么是controller 在集群上管理和运行容器的对象 2、 pod和controller关系 pod是…

PHP代码审计工具

PHP代码审计工具 1 环境准备 Seay源代码审计系统.exe 和准备靶场的源码php 2 Seay下载地址 https://github.com/f1tz/cnseay安装Seay源代码审计系统.exe报错时,安装.net framework 3.5 # windows插件.net framework 3.5 下砸地址 https://www.microsoft.com/en…

Linux 后台开发必知的 I/O 优化知识总结

IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的发展,明显落后于CPU的发展。Memchached也好,NoSql也好,这些…

Python脚本:让工作自动化起来

Python是一种流行的编程语言,以其简洁和易读性而闻名。它提供了大量的库和模块,使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码,可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…

进程(0)——计算机的中的软硬件【Linux】

进程(0)——计算机的中的软硬件【Linux】 一.硬件:1.1 冯诺依曼结构:1.2 存储金字塔1.2.1输入设备和存储器:1.2.2输出设备和存储器: 二.软件:2.1 操作系统2.1.1 如何理解管理: 博主自…