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

网络编程5----初识http

1.1 请求和响应的格式

http协议和前边学过的传输层、网络层协议不同,它是“一问一答”形式的,所以要分为请求响应两部分看待,同时,请求和响应的格式是不同的,我们来具体介绍一下。

1.1.1 请求

在介绍请求之前,先来看一个具体的http使用案例:

首先我们能看到的是,http的内容是能够直接看懂的,说明http是文本形式的,不同于TCP、IP协议的二进制形式,http的响应也是文本形式的,但是我们查看时会发现是二进制形式,这是因为响应在网络传输过程中会被压缩为二进制形式,用来提高传输效率,节省网络带宽。

请求分为以下几个部分:

1、首行

这是http的第一行 分为三个部分,用空格分隔

1)GET:http请求的方法(method),还有其它很多方法,之后介绍

2)URL:唯一资源定位符,描述了一个资源在网络中的位置

3)版本号:

2、请求头

请求头是很多键值对结构的数据,每个键值对都是独占一行的,要注意的是,这里的键值对都是属于“标准规定的”,即key和value都有固定的东西,不可以程序员自己随便定义

3、空行

请求头的结束标记

4、正文(请求体)

有的http请求有,有的没有,后边详细介绍

1.1.2 响应 

响应也是由四部分构成的:

1、首行

1)版本号:HTTP/1.1

2)  状态码:200

3)状态码描述:OK

2、响应头

响应头的格式和请求头是一样的,也是键值对形式的,但是具体的键和值不同,后边会详细介绍

3、空行

响应头的结束标记

4、正文(响应体)

正文里的内容可能会很长,有很多中形式,HTML、CSS、JS、JSON、图片、视频.....

1.2 请求(详细版)

1.2.1 首行

请求方法:

请求方法有上图中那么多种,在这里我们只介绍最常用的GET和POST方法。

GET:通常会把要传给服务器的数据放在URL的查询字符串中(query string)

POST:通常会把要传给服务器的数据放在请求体中

这是GET和POST最本质的区别,接下来介绍的一些特点均是基于这个区别的:

注意:GET请求和POST请求的区别是面试中的常考题,但是由于技术的发展,这些区别已经属于“历史遗留”问题了,现在二者已经可以相互替换,差别不大了,所以了解即可:

1、GET请求能传递的数据量有上限,POST请求能传递的数据量没有上限

这种说法产生的原因是因为GET请求携带数据是放在query string中的,而POST请求携带数据是放在请求体中的,有一定的道理,但是随着技术的进步,现在的URL甚至可以携带图片资源,所以这种说法应该会逐渐消失

2、GET请求传递数据不安全,POST请求传递数据安全

举个例子,在我们登录账号时,如果使用GET请求,账号和密码都会直接携带在URL中,可以直接被看到,而POST的账号和密码是隐藏在请求体中的,不会被看到,所以有更安全这个说法,但是!!!这个说法是不正确的,上述的例子骗一个不懂计算机的小白或许还可以的,但是对于一个黑客,无论你的数据放在哪里,他都能拿到,所以,想要数据安全,要采取别的方法,比如加密措施....

3、GET只能给服务器传文本数据,POST可以给服务器传文本和二进制数据

这种说法也是不正确的:

1)GET请求也可以把数据放在请求体中(只是通常不这样做)

2)GET也可以把二进制数据进行base64转码,放在URL的query string中

4、GET请求是幂等的,POST请求是不幂等的

幂等:输入相同的数据,输出是稳定的

比如奶牛产奶,吃草之后,奶牛一定产的是牛奶,而不是别的东西,这就是幂等的。

但是这种说法也不完全正确,当我们使用GET请求访问一些广告页面时,输入的请求相同,但是输入的广告常常是不相同的,所以这种说法也不完全正常

5、GET请求可以被浏览器缓存,POST不可以被缓存

这个说法其实是基于第4个说法的,如果每次输出稳定,当然可以将数据缓存在浏览器中,反正每次请求的输出都一样,那直接在缓存中拿来使用不就好了

6、GET请求可以被浏览器收藏夹收藏,POST不可以被收藏

这种说法的主要原因是认为收藏的时候可能会丢失请求的body

URL:

这是请求首行中URL的具体划分:

  • 协议方案名:指出用到的协议是什么
  • 登录信息(认证):现在大多数请求已经没有了
  • 服务器地址:服务器在网络中的位置,也就是IP 地址,此处用域名表示
  • 服务器端口号:指明了具体要访问服务器中的哪个程序
  • 带层次的文件路径:指明了具体要访问程序中的哪个资源
  • 查询字符串:是一种键值对结构的数据,以?开头,这里的键值对都是程序猿自定义的,相当于对这次请求的一些补充说明
  • 片段标识符:有的网页内容比较长,就需要划分为多个“片段”,通过片段标识符,能够实现页面内部的跳转(技术文档中十分常见)

对于URL,给大家举个具体的例子:

http://小淘气食堂:80/包子/猪肉大葱包子?葱=少放&辣椒=微辣

对于上述这个例子,小淘气食堂就是域名,也就是要访问的网络资源的地址,80是这个食堂中具体的窗口,也就是我们要访问的具体的程序,包子/猪肉大葱包子是在这个窗口中具体想要访问的资源,?葱=少放&辣椒=微辣就是我们说的查询字符串,是对于这次请求的一个补充说明。

1.2.2 请求头

请求头里的键值对很多,这里介绍几个比较重要的:

1、HOST:这是请求的域名,在URL中也有,即服务器的网络地址

2、Content-Length:body中数据的长度

3、Content-type:body中数据的类型

请求中有body才会有以上两种请求头键值对,GET请求通常没有body,所以通常没有,POST请求有body,所以请求头中会包含以上两种键值对

Content-type是有很多类型的,例如:

  • json
  • form表单的格式
  • form-data的格式

后续给服务器提交请求时,不同的Content-type,服务器处理数据的逻辑是不同的,服务器返回数据给浏览器,也需要设置合适的Content-type,浏览器也会根据不同的Content-type做出不同的处理。

4、User-Agent

5、Referer:Referer描述了当前页面是从哪个页面跳转过来的

6、Cookie:Cookie可以认为是浏览器在本地存储数据的一种机制(即直接把数据保存在浏览器中)

浏览器的数据都来自服务器,之后的操作也会将数据提交给服务器,但是在程序运行过程中,也有一些数据需要存储在浏览器本地(例如上次登陆时间、用户的身份信息...),这些数据是需要在下次传给服务器数据时一并发送过去的,这些临时性的数据,就存储在浏览器比较合适。以下是一些Cookie在日常应用中的例子:

相关文章:

网络编程5----初识http

1.1 请求和响应的格式 http协议和前边学过的传输层、网络层协议不同,它是“一问一答”形式的,所以要分为请求和响应两部分看待,同时,请求和响应的格式是不同的,我们来具体介绍一下。 1.1.1 请求 在介绍请求之前&…...

“用友审批+民生付款”,YonSuite让企业发薪更准时

随着现代企业经营模式的不断创新和市场竞争的加剧,企业薪资管理和发放的效率、准确性和及时性已成为企业管理的重要一环。然而,在实际操作中,许多企业面临着薪资管理复杂、发放流程繁琐、数据不准确等难点和痛点。为了解决这些问题&#xff0…...

EtherCAT扫盲,都是知识点

1. 什么是EtherCAT EtherCAT,全称Ethernet for Control Automation Technology,字面意思就是用于控制自动化技术的以太网。它是一种基于以太网的实时工业通信协议,简单说,就是让机器们通过网线互相聊天的高级方式。 EtherCAT 是最…...

开发中遇到的错误 - @SpringBootTest 注解爆红

我在使用 SpringBootTest 注解的时候爆红了&#xff0c;ait 回车也导不了包&#xff0c;后面发现是因为没有加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>…...

数据仓库的实际应用示例-广告投放平台为例

数据仓库的数据分层通常包括以下几层&#xff1a; ODS层&#xff1a;存放原始数据&#xff0c;如日志数据和结构化数据。DWD层&#xff1a;进行数据清洗、脱敏、维度退化和格式转换。DWS层&#xff1a;用于宽表聚合值和主题加工。ADS层&#xff1a;面向业务定制的应用数据层。…...

Beyond VL了解学习

Beyond VL&#xff1a;多模态处理的前沿 在今天的数据驱动时代&#xff0c;我们经常需要处理和分析多种类型的数据&#xff0c;例如文本、图像、视频和音频。Beyond VL 是一个先进的多模态模型&#xff0c;专为处理这些多种数据而设计。它能够同时处理多种模态的数据&#xff…...

AI音乐革命:创意产业的新篇章

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;在各个领域的应用越来越广泛&#xff0c;特别是在音乐产业中&#xff0c;AI音乐大模型的涌现&#xff0c;正在重新定义音乐创作的边界。最近一个月&#xff0c;随着多个音乐大模型的轮番上线&#xff0c;素人…...

python从入门到精通1:注释

在Python编程中&#xff0c;注释是一种非常重要的工具&#xff0c;它不仅可以帮助我们记录代码的目的、工作方式以及任何需要注意的地方&#xff0c;还可以使代码更具可读性。Python提供了两种主要的注释方式&#xff1a;单行注释和多行注释。下面我们将深入探讨这两种注释方式…...

CountDownLatch(应对并发问题的工具类)

CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作以后&#xff0c;再执行当前线程&#xff1b;比如我们在主线程需要开启2个其他线程&#xff0c;当其他的线程执行完毕以后我们再去执行主线程&#xff0c;针对这 个需求我们就可以使用CountDownLatch来进…...

HarmonyOS开发知识 :扩展修饰器,实现节流、防抖、权限申请

引言 防重复点击&#xff0c;利用装饰器面向切面&#xff08;AOP&#xff09;的特性结合闭包&#xff0c;实现节流、防抖和封装权限申请。 节流 节流是忽略操作&#xff0c;在触发事件时&#xff0c;立即执行目标操作&#xff0c;如果在指定的时间区间内再次触发了事件&…...

自然语言NLP的基础处理

NLP基本处理从句子的情感分析、实体与实体直接的关系&#xff0c;句子结构来分析 情感分析 1.句子的情感分析找出句子表达的是正面、负面还是中性的情感。 情感分析的影响因素&#xff1a; 词语顺序&#xff1a;词语的顺序可以影响句子的整体情感。例如&#xff0c;“我喜欢…...

带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

ros中发布点云数据xyz以及带颜色的点云数据xyzrgb ros中发布点云数据xyz可以直接用python来做或者C(看个人偏好) ros中发布带颜色的点云数据xyzrgb环境1.新建ROS工作空间2.创建功能包 ros中发布点云数据xyz 可以直接用python来做或者C(看个人偏好) 在这里我们带有颜色的点云数…...

python学习—列表和元组

系列文章目录 python学习—合并TXT文本文件 python学习—统计嵌套文件夹内的文件数量并建立索引表格 python学习—查找指定目录下的指定类型文件 python学习—年会不能停&#xff0c;游戏抽签抽奖 python学习—循环语句-控制流 python学习—合并多个Excel工作簿表格文件 文章目…...

c++题目_水仙花数

水仙花数-普及-题目-ACGO题库 题目描述 求100-n中的水仙花数。一个数x&#xff0c;x的百位、十位、个位&#xff0c;分别用a、b、c来表示&#xff1b; 当a * a * a b * b * b c * c * c x时&#xff0c;x就被称为水仙花数。(n< 999) 输入格式 一行一个整数n 输出格式…...

使用 Iceberg、Tabular 和 MinIO 构建现代数据架构

现代数据环境需要一种新型的基础架构&#xff0c;即无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载的基础架构。这就是现代数据湖的用武之地&#xff0c;它为您的所有数据需求提供了一个中心枢纽。然而&#xff0c;构建和管理有效的数据湖可能很复杂。 这…...

jnp.linalg.norm

jnp.linalg.norm 是 JAX 中用于计算向量或矩阵的范数的函数。JAX 是一个用于高性能机器学习研究的 Python 库&#xff0c;它提供了与 NumPy 类似的 API&#xff0c;但支持自动微分和加速计算。jnp 是 JAX 的 NumPy 接口。 jnp.linalg.norm 的基本语法 jnp.linalg.norm(x, ord…...

20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具

20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具&#xff1a; rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…...

ARM32开发--存储器介绍

知不足而奋进 望远山而前行 目录 文章目录 前言 存储器分类 RAM ROM EEPROM Flash 总结 前言 在现代计算机系统中&#xff0c;存储器扮演着至关重要的角色&#xff0c;不仅影响着数据的存取速度和稳定性&#xff0c;还直接关系到计算机系统的性能和应用场景的选择。存…...

Web服务器

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 当在浏览器输入URL后&#xff0c;浏览器会先请求DNS服务器&#xff0c;获得请求站点的 IP 地址&#xff08;即根据URL地址“www.mingrisoft.com”获取…...

大语言模型-Transformer

目录 1.概述 2.作用 3.诞生背景 4.历史版本 5.优缺点 5.1.优点 5.2.缺点 6.如何使用 7.应用场景 7.1.十大应用场景 7.2.聊天机器人 8.Python示例 9.总结 1.概述 大语言模型-Transformer是一种基于自注意力机制&#xff08;self-attention&#xff09;的深度学习…...

POI:接收上传上来的excel,解析并导入到数据库

目录 1、控制层 2、业务层&#xff08;主要逻辑&#xff09; 1、控制层 因为前端设置了只能上传1个文件&#xff0c;这里直接取一个。 RequestMapping(value "/shebeiDaoru.ctrl", method RequestMethod.POST, produces "application/json;charsetUTF-8&q…...

网页的CSS和JavaScript文件没有自动更新, 解决办法

项目场景&#xff1a; 无人值守的场馆预定以及管理 问题描述 更新了CSS和JavaScript&#xff0c;访问始终样式不对 原因分析&#xff1a; 浏览器缓存了你的CSS和JavaScript文件 浏览器缓存了你的CSS和JavaScript文件。当文件的修改时间戳&#xff08;last-modified&#xff…...

Go语言 获取服务器资源磁盘Disk情况

1、获取整个磁盘的总量、已使用量、使用率 package mainimport ("fmt""github.com/shirou/gopsutil/disk""log" )func main() {// 获取所有挂载点的磁盘使用率信息partitions, err : disk.Partitions(false)if err ! nil {log.Fatalf("Err…...

使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法

最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…...

深入探究RTOS的任务调度

阅读引言&#xff1a; 此文将会从一个工程文件&#xff0c; 一步一步的分析RTOS的任务调度实现&#xff0c; 这里选用FreeRTOS分析&#xff0c; 别的也差不多的&#xff0c; 可能在细节上有少许不一样。 目录 1&#xff0c; 常见嵌入式实时操作系统 2&#xff0c; 任务调度的…...

【shell脚本速成】函数

文章目录 一、函数1.1、函数介绍1.2、函数定义1.3、函数调用 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的每一刻&#xf…...

拒绝零散碎片, 一文理清MySQL的各种锁

系列文章目录 学习MySQL先有全局观&#xff0c;细说其发展历程及特点 Mysql常用操作&#xff0c;谈谈排序与分页 拒绝零散碎片&#xff0c; 一文理清MySQL的各种锁&#xff08;收藏向&#xff09; 系列文章目录一、MySQL的锁指什么二、排他与共享三、全局锁&#xff08;Global…...

P5711 【深基3.例3】闰年判断

1. 题目链接 https://www.luogu.com.cn/problem/P5711 P5711 【深基3.例3】闰年判断 2. 题目描述 题目描述&#xff1a;判断一个数是否是闰年 输入&#xff1a;输入一个整数n 输出&#xff1a;输出1或0&#xff0c;如果是闰年&#xff0c;输出1&#xff0c;否则输出0 3. 我的…...

基于Raft算法实现的分布式键值对存储系统——学习笔记

目录 1 基于Raft算法实现的分布式键值对存储系统 1.1 模块 2 Raft 算法 2 .1 概念 2.2 raft角色&#xff08;先简单了解&#xff0c;方便后续阅读&#xff09; 2.3 raft想解决什么问题&#xff1f; 2.4 选举领导 2.5 领导者故障 附录&#xff1a; 参考文献&#xff1…...

秋招突击——6/17——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}

文章目录 引言复习新作删除链表倒数第N个节点题目描述个人实现参考实现 总结 引言 主管面&#xff0c;面的很凄惨&#xff0c;不过无所谓了&#xff0c;我已经尽力了。上午都在整理的面经&#xff0c;没有复习算法&#xff0c;而且这两天要弄一下论文&#xff0c;二十号就要提…...

为什么建行网站打不开/谷歌seo是什么

为什么80%的码农都做不了架构师&#xff1f;>>> 1. Menu(左侧菜单生成标签) 1.1. 参数 属性名类型描述是否必须默认值stylestring菜单样式否nullparentFunstring一级菜单是nullchildFunstring二级菜单是null1.2. 用法 <t:menu parentFun"${parentFun}&quo…...

做义工旅行有哪些网站/电子商务网站推广策略

元组拆包中的_ 第三个用法是元组拆包&#xff0c;赋值的时候可以用_来表示略过的内容。如下代码忽略北京市人口数&#xff0c;只取得名字和区号。 >>> city,_,code (Beijing,21536000,010) >>> print(city,code) Beijing 010...

太原做网站的公司排行/怎么做游戏推广员

模式中的角色 抽象类&#xff08;AbstractClass&#xff09;&#xff1a;定义了算法的骨架。 具体类&#xff08;ConcreteClass)&#xff1a;实现抽象类中的抽象方法&#xff0c;已完成完整的算法。 //抽象模板类 public abstract class AbstractPerson{//抽象类定义整个流程骨…...

网站正在建设中模板 html/什么公司适合做seo优化

点击上方“Java基基”&#xff0c;选择“设为星标”做积极的人&#xff0c;而不是积极废人&#xff01;源码精品专栏 原创 | Java 2020 超神之路&#xff0c;很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库…...

尚云网站建设/青海seo技术培训

2019独角兽企业重金招聘Python工程师标准>>> 这款游戏是前一段时间完成的一个项目&#xff0c;飞行熊猫游戏源码android版&#xff0c;飞行熊猫基于cocos2d游戏引擎开发&#xff0c;包括了谷歌admob广告支持&#xff0c;没有任何版权问题&#xff0c;大家可以自由修…...

网站建设专业/营业推广是什么意思

在c语言当中解决字符串当中某个字符或者数字时,经常用到sscanf,的确也比较好用,大部分正则问题都能解决,官方使用方法介绍如下: 函数语法 int sscanf( const char *buffer, const char *format, [ argument ] ... ); 参数编辑 播报 buffer  存储的数据 format…...