网络原理 HTTP与HTTPS协议

news2024/9/23 4:53:06

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

关注博主带你了解更多计算机网络知识

目录

1.HTTP概念

2.HTTP报文格式

3.HTTP请求 

1.首行

1.1URL 

 1.2 GET⽅法 

1.3 POST⽅法

1.4 其他⽅法 

2.请求头(header) 

2.1 关于请求报头和响应报头(header)

2.2 User-Agent(简称UA)

2.3 Referer

2.4 Cookie

3.空行  

4.正文

4.HTTP响应

认识"状态码"

1.首行

2.响应头(header)

3.空行

4.正文


1.HTTP概念

HTTP全称为超文本传输协议,是⼀种应⽤⾮常⼴泛的应⽤层协议,不仅仅能传输文本,还能传输图片,传输音频,传输视频,传输其他的各类数据,广泛应用在日常开发的各种场景.

例如:打开浏览器网页;打开手机app;后端程序,都是分布式/微服务体系结构,服务器之间的相互调用,也大概率是HTTP.

目前互联网上见到的HTTP协议,绝大部分都是HTTP/1.1版本(已经很好用了),如果要升级,要考虑成本,收益,设备兼容等情况 

并且HTTP协议,是一种典型的"一问一答模型"协议:

客户端->服务器:客户端发一个请求,服务器返回一个响应(一一对应)

2.HTTP报文格式

先解释下抓包:抓包就是通过网卡上的数据,获取到,并且解析显示出来

借助抓包工具,观察到HTTP请求/响应的详细情况,我们可以通过使用Fiddler来抓包. Fidder官方下载网址:Fiddler Classic | Original Web Capturing Tool for Windows,下载完打开Fiddler:

当我访问我的博客网页,就会出现一些抓包信息: 蓝色数据表示响应为html,Raw表示最原始的数据格式,可以查询HTTP的响应的请求。

3.HTTP请求 

HTTP的请求格式是文本格式:

1.首行

1.1URL 

俗称的"⽹址"其实就是说的URL:统⼀资源定位符

登录信息几乎见不到了,http端口默认为80 ,键值对之间用&分割,键和值之间用=分割,比如:

https://search.bilibili.com/allvt=88073156&keyword=%E9%BB%91%E6%82%9F%E7%A9%BAmod&search_source=1

 URL主要关心四个部分:IP地址(域名);端口号;层次的路径;查询字符串(在Spring MVC重点学习). 

 

 1.2 GET⽅法 

GET是最常⽤的HTTP⽅法.常⽤于获取服务器上的某个资源.在浏览器中直接输⼊URL,此时浏览器就会发送出⼀个GET请求.GET把服务器的数据放到query string(URL)中.

GET请求的特点 : ⾸⾏的第⼀部分为GET;URL的query string可以为空,也可以不为空;header部分有若⼲个键值对结构;body部分为空.

1.3 POST⽅法

POST⽅法也是⼀种常⻅的⽅法.多⽤于提交⽤⼾输⼊的数据给服务器(例如登陆⻚⾯).POST把服务器的数据放到body中

POST请求的特点: ⾸⾏的第⼀部分为POST;URL的query string⼀般为空(也可以不为空);header部分有若⼲个键值对结构;body部分⼀般不为空;body部分⼀般不为空body内的数据格式通过header中的Content-Type 指定.body的⻓度 由header中的Content-Length 指定

经典⾯试题:谈谈GET和POST的区别:

明确结论,这两个方法其实没有本质区别,但在使用习惯上,还是有区别的:

1.语义不同:  方法表示的含义:GET表示从服务器拿数据,POST表示往服务器提交数据

2.传输数据方式不同: GET传递数据,通常通过query string 把自定义数据交给服务器; POST传递数据,通常是通过body把自定义数据交给服务器

3.GET方法对应的请求,通常设计成"幂等"的;POST方法对应请求,对于"幂等性"则无要求

4.GET如果设计成幂等性,此时GET的结果是可以被缓存的;POST不设计成幂等性,POST就不应该被缓存.

错误说法:
1.GET传输数据有上限,POST没有:早期硬件资源有限,限制了URL长度,但是实际上并没有规定。
2.GET请求数据不安全,POST安全:安全是指传输的数据不容易被黑客获取到或者说获取到不容易破解。
3.GET只能传输文本数据:POST可以文本+二进制:完全可以!!

1.4 其他⽅法 

PUT与POST相似,只是PUT具有幂等特性,⼀般⽤于更新,PUT是把数据放到body中

DELETE删除服务器指定资源,DELETE是把数据放到query string中

2.请求头(header) 

2.1 关于请求报头和响应报头(header)

Host: 表⽰服务器主机的地址和端⼝.

Content-Length: 表⽰body中的数据⻓度.(没有正文则没有这个属性)

Content-Type: 表⽰请求的body中的数据格式. (没有正文则没有这个属性)

Content-Length Content-Type,如果有body但是没有这两个属性,意味着这是非法的请求/错误的请求

2.2 User-Agent(简称UA)

User-Agent 是一个 HTTP 请求头部字段,它允许网络请求标识发起请求的客户端应用程序的信息,包括应用程序的类型、版本以及正在使用的操作系统等

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

2.3 Referer

Referer是一个 HTTP 请求头部字段,用于指示一个请求是从哪个页面发起的。这个字段通常由浏览器设置,当用户点击链接时,它会告诉服务器请求是从哪个页面(URL)跳转过来的。

2.4 Cookie

HTTP 协议中,Cookie 是服务器发送到用户浏览器并保存在本地的小块数据。它用于存储有关用户会话的信息,以便在用户浏览网站时跨多个页面请求或在后续的会话中识别用户,也就是说Cookie就属于浏览器给网站提供的一种"客户端存储数据"的机制.它是按照域名为为维度分别进行存储. 

Cookie也是键值对结构,使用; 来分割键值对,使用= 来分割键和值

为了安全,浏览器禁止网页直接访问你的电脑硬盘,浏览器并没有把路完全堵死,它允许网页通过键值对的方式(Cookie)来存储数据(本质也是储存在硬盘上),具体这样的键值对是如何储存到硬盘上的,浏览器封装好,网页本身无法干预.

首次访问某个网站,可能是不带Cookie的,在响应中就会有Set-Cookie这样的header,把一些键值对写回到浏览器这边,浏览器后续访问这个网站就会带有Cookie

Cookie来源:当用户访问一个网站时,服务器可以通过 HTTP 响应中的 Set-Cookie 向用户的浏览器发送一个或多个 Cookie

Cookie去向:当用户再次访问同一个网站时,浏览器会把之前存储的 Cookie 带上,发送回服务器。

有一个Cookie非常经典的使用场景,使用Cookie保存用户的身份信息 ,浏览器登录页面

3.空行  

请求头结束的标记

4.正文

有的http请求有,有的没有

4.HTTP响应

认识"状态码"

1)200 ok: 成功
2)404 NOT FOUND :访问资源没有找到,url可能错了
3)403 Forbidden:请求资源没有权限访问
4)405 Method not Allowed:你的服务器只支持get请求,可是你发了一个post
5)500 Internal Server Error:服务器内部错误
6)302 Move temporarily:临时重定向

1.首行

2.响应头(header)

3.空行

请求头结束的标记。

4.正文

正文内容比较长,可能是多种格式,HTML,CSS,JS,JSON,图片,字体,视频等。

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

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

相关文章

JVM面试问题集

什么是JVM? 了解过字节码文件的组成吗? 说一下运行时数据区 哪些区域会出现内存溢出,会有什么现象? JM在JDK6-8之间在内存区域上有什么不同 类的生命周期 什么是类加载器 什么是双亲委派机制 打破双亲委派机制 Tomcat的自定义类加载器

【网络通信基础与实践番外一】多图预警之图解UDP和TCP前置知识

参考大佬的文章https://www.cnblogs.com/cxuanBlog/p/14059379.html 一、宏观架构中的传输层 在计算机中,任何一个可以交换信息的介质都可以称为端系统。计算机网络的运输层则负责把报文从一端运输到另一端,运输层实现了让两个互不相关的主机进行了逻辑…

Kafka-Manager安装及操作

文章目录 一、kafka-manager介绍二、kafka-manager安装三、Kafka-Manager操作 一、kafka-manager介绍 CMAK (Cluster Manager for Apache Kafka, previously known as Kafka Manager) CMAK (previously known as Kafka Manager) is a tool for managing Apache Kafka cluster…

STM32篇:开发环境安装

编程语言:C语言 需要安装的软件有两个:Keil5 和 STM32CubeMX 一.Keil5 的安装 使用 Keil4 写 STM32 代码其实也是可以,但需要很复杂的配置,不建议新手操作。 比较推荐 Keil5 编写 STM32 ,只需要一些简单的设置就可…

(一)Lambda-Stream流

概述 Java8的Stream使用的是函数式编程模式,它可以被用来对集合或数组进行链状流式的操作,可以更方便地让我们对集合或数组操作。 使用Stream流程: 创建流 -> 中间操作 -> 终结操作; 注:必须要有终结操作否则中间操作不生效…

hive-拉链表

目录 拉链表概述缓慢变化维拉链表定义 拉链表的实现常规拉链表历史数据每日新增数据历史数据与新增数据的合并 分区拉链表 拉链表概述 缓慢变化维 通常我们用一张维度表来维护维度信息,比如用户手机号码信息。然而随着时间的变化,某些用户信息会发生改…

7.搭建个人金融数据库之快速获取股票列表和基本信息!

前边我们提过,免费的数据一般来自于爬虫,获取难度和维护成本都比较高,其实不太适合小白用户。所以非必要情况下,我们尽量不用这种方式来获取数据。 我自己用的比较多的是tushare,一般来说有它也就够了,大…

Junit4测试报错:java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter

原来build path 界面: Junit为Modulepath 应把Junit改为Classpath即可,如下图所示:

前端和后端的相对路径和绝对路径

1. 相对路径访问图片 test.html 位于 web/a/b/c/ 目录中&#xff1a; 若要访问 static/img/ 文件夹中的图片&#xff08;假设图片名为 image.png&#xff09;&#xff0c;相对路径应该是&#xff1a; <img src"../../../static/img/image.png" alt"Image&quo…

Java笔试面试题AI答之设计模式(3)

文章目录 11. Spring开发中的哪里使用了工厂设计模式 &#xff1f;1. BeanFactory2. 工厂方法模式3. 抽象工厂模式4. 示例说明总结 12. 什么是代理模式 &#xff1f;13. 请列举代理模式的应用场景 &#xff1f;14. 什么是原型模式 &#xff1f;15. 请简述Java中原型模式的使用方…

Mixamo动画使用技巧

1、登录Mixiamo网站 2、下载人物模型 3、找到FBX文件 选中人形骨骼 3、下载动画 4、拖拽FBX 5、注意事项 生成的FBX文件中会包含一个骨骼一个动画 如果人物有骨骼&#xff0c;则不需要&#xff0c;没有需要对应此包中的骨骼&#xff0c;骨骼不可以通用&#xff0c;动画通用 …

百度智能云API调用

植物识别API import base64 import urllib import requestsAPI_KEY "你的图像识别API_KEY" SECRET_KEY "你的图像识别SECRET_KEY"def main():url "https://aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token" get_access_t…

[spring]应用分层 及 Spring IoCDI

文章目录 一. 应用分层二. Spring IoC获取String中的对象五大 类注解1. Controller (控制器存储)2. Service&#xff08;服务存储&#xff09;3. Repository(仓库存储)4. Conponent(组件存储)5. Configuration(配置存储) 方法注解Bean定义多个对象重命名 三. Spring DI属性注入…

排序-----归并排序(递归版)

核心思想&#xff1a;假设数组前后两部分各自有序&#xff0c;然后各定义两个指针&#xff0c;谁小谁放到新开辟的数组里面&#xff0c;最后把新开辟的数组赋值给原数组就完成了。要使前后两部分有序就采用递归的方式&#xff0c;不断往下划分块&#xff0c;最后一层划分为两个…

springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)

接着上篇博客的学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上&#xff0c;基本完成用户模块的登录接口的主逻辑以及提到了问题&#xff1a;"用户未登录&#xff0c;需要通过登录&#xff0c;获取到令牌进行登录认证&#xff0c;…

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好&#xff0c;代码也耦合度也低&#xff0c;但是我有个简单的写法同样能实现一样的效果&#xff0c;所以我就充分发挥了一下主观能动性 相较于基本功能&#xff0c;这一版做出了如下改动 1.限制了对象池最大数量&#xff0c;多出来的…

Pybullet 安装过程

Pybullet 安装过程&#xff08;windows&#xff09; 1. 安装C编译工具2. 安装Pybullet 1. 安装C编译工具 pybullet 需要C编译套件&#xff0c;直接装之前检查下&#xff0c;要不会报缺少某版本MVSC的error&#xff0c;最好的方式是直接下载visual studio&#xff0c;直接按默认…

多无人机通信(多机通信)+配置ssh服务

目录 多机通信 设备 主从机通信设置 配置从机 配置主机 测试 正式启用 MAVROS通信 多机通信 多机通信是实现机器人编队的基础&#xff0c;通过网络搭建通信链路。我们这里用中心节点网络通信&#xff0c;所有数据需有经过中心节点&#xff0c;所以&#xff0c;中心节点…

【有啥问啥】探索累计推理(Cumulative Reasoning, CR)——大型语言模型中的复杂推理新框架

探索累计推理&#xff08;Cumulative Reasoning, CR&#xff09;——大型语言模型中的复杂推理新框架 引言 随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在自然语言处理上的表现令人瞩目。然而&#xff0c;LLMs在…

实现人体模型可点击

简化需求&#xff1a;实现项目内嵌人体模型&#xff0c;实现点击不同部位弹出部位名称 一&#xff1a;优先3d&#xff0c; 方案&#xff1a;基于three.js&#xff0c;.gltf格式模型&#xff0c;vue3 缺点&#xff1a;合适且免费的3d模型找不到&#xff0c;因为项目对部位有要…