Java--HTTP(上)

HTTP是什么

HTTP(超文本传输协议)是一种应用非常广泛的应用层协议。

HTTP在传输层主要依赖的是TCP协议,但是从HTTP3.0开始,切换到了UDP

这是因为HTTP3.0应用层这里自己实现了可靠传输,而TCP特别影响性能

HTTP的主要应用场景

1.web开发中:网页前端和服务器后端之间的通信

2.移动端app和服务器后端之间的通信

3.分布式系统的服务器之间调用

与HTTPS的区别

HTTP本心不加密数据,存在安全风险,而HTTPS是HTTP的安全版本,核心区别在于加密

HTTP:数据以明文形式传输,容易被窃听伪造

HTTPS:通过SSL/TLS协议对传输数据进行加密,可验证服务器身份,确保数据的完整性和机密性。

客户端服务器的交互模型:

1.多问一答 : 上传一个大文件

2.一问多答 : 下载一个大文件

3.多问多答 : 远程桌面

理解HTTP协议的工作过程

我们在浏览器输入一个网址,这时候浏览器会给对应的服务器发送一个HTTP请求,当服务器收到请求之后,经过处理就会返回一个HTTP响应

当我们访问网站的时候,会不止一次地触发HTTP请求/响应的交互过程

我们可以通过抓包工具来看到详细的交互数据。

Fiddler

我们通过Fiddler 抓包工具来帮助我们了解HTTP

我们访问 sogou.com,可以通过Fiddler 看到如下图

其中我们可以看到蓝色的条目,这是因为不同的颜色代表不同的数据格式

此时蓝色表示的是 HTML

我们点击Raw,此时显示的就是HTTP原始的数据格式

SyntaxView是将原始的文本数据按照语法规则进行美化后的显示

1.当数据被加密或者压缩的时候会乱码

2.数据是二进制非文本的时候,也会是乱码

3.字符编码不匹配也会乱码

4.数据格式错误或损坏也会乱码

HTTP请求结构:

首行包含三个关键信息:

请求方法:

请求URL:

HTTP版本:

其他行:header 请求报头

header 有很多行,每一行都是一个键值对,键和值之间通过 :空格来分割

后续 空行 请求头字段之后必须要有一个回车,告诉服务器"请求头已经结束"

最后是请求体 是向服务器提交的具体数据

HTTP响应结构:

第一行:响应行 包含了HTTP版本 状态码 和状态描述

中间部分· 响应头 直到空行为止是服务器向客户端

空行 响应头之后有个空行 用于分割响应头和响应体 告诉客户端响应头结束

响应体:空行之后的内容,即服务器时即返回的资源,也是客户端真正需要的内容

URL(统一资源定位符):

用于定位互联网上的资源,它通过规定的格式告诉浏览器或其他客服端要如何访问以及访问哪里的资源。

https://www.sogou.com/ 为例

协议:https

域名:www.sogou.com

路径:/(表示服务器的根目录,通常对应首页)

省略了默认端口443,查询参数和片段标识符

完整结构:

复制代码
协议://域名:端口/路径?查询参数#片段标识符

URL Encode(URL编码):

作用:将URL中非法字符,特殊字符或者非ASCII字符转换为标准ASCII字符格式的编码方式

目的:避免字符与URL语法冲突,确保数据传输准确

URI 和 URL

URI(统一资源标识符)

URL(统一资源定位符)

URL 是 URI 的子集

URI的核心作用是"标识资源" 告诉你这是什么资源,不一定包含如何访问资源的信息

URL不仅告诉你这是什么资源,而且还告诉你如何访问资源

认识方法:

|---------|------------------------|---------|
| GET | 获取资源 | 1.0、1.1 |
| POST | 传输实体主体(常用于提交数据) | 1.0、1.1 |
| PUT | 传输文件(多用于资源创建 / 更新) | 1.0、1.1 |
| HEAD | 仅获取响应头(用于探知资源信息) | 1.0、1.1 |
| DELETE | 删除文件 | 1.0、1.1 |
| OPTIONS | 询问服务器支持的请求方法 | 1.1 |
| TRACE | 追踪请求路径(用于调试,少用) | 1.1 |
| CONNECT | 建立隧道协议连接代理(如 HTTPS 代理) | 1.1 |
| LINK | 建立资源间的关联(较冷门) | 1.0 |
| UNLINE | 断开资源间的连接(较冷门) | 1.0 |

GET 方法最为常用 其次是 POST PUT DELETE

GET方法

对于 GET 方法,通常是没有请求体的

实例:

POST方法

关于POST方法容易在两个场景出现:

1.登录

2.上传文件

示例:

GET和POST的区别:

1.GET通常用来表示"获取数据"语义 POST通常表示"提交数据语义"

2.GET通常把给服务器的数据放到 query string 中,POST 通常放到 body中

(GET和POST没有什么本质区别 能用GET的地方可以换成POST 能用POST的地方也可以换成GET)

GET方法一般实现成幂等,而POST则没有这个要求

幂等性:

多次执行相同的请求,最终对系统资源产生的影响与"只执行一次"完全一致

示例:

修改网名为张三,多次提交请求,最后姓名定格为张三,而不是张三张三

不幂等:

多次执行相同的请求,会对系统资源产生累加的副作用

示例:多次往余额增加10元,最后余额就是累加后的结果

HOST报头:

表示服务器主机的地址和端口号

content - length报头:

表示Body中的数据长度

content-Type 报头

表示请求的body中的数据格式

referer报头

表示这个页面是从哪个页面跳转过来的

Cookie:

Cookie是服务器通过HTTP响应报头下发给客户端的小型文本数据

用于在客户端存储信息,通过请求报头携带回给服务器

核心作用:

记录用户的登陆状态,不用频繁重复的输入账号密码。存储了用户的界面偏好(主题,字体大小等等)

以gitee的主题为例:

此时是黑色主题,

两种主题的数据都是存在于Cookie里面的

我们可以将 Cookie里面的 light 改为 dark,此时刷新页面就会将主题改为dark

相关推荐
不可能的是16 小时前
前端 SSE 流式请求三种实现方案全解析
前端·http
Jony_2 天前
高可用移动网络连接
网络协议
chilix3 天前
Linux 跨网段路由转发配置
网络协议
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅4 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
gihigo19984 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
2501_946205524 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel4 天前
第七部分:高级IO
服务器·网络
数字护盾(和中)4 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
~远在太平洋~4 天前
Debian系统如何删除多余的kernel
linux·网络·debian