javaweb http

1、http简介

HTTP 超文本传输协议(HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则 ,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为 报文 。 HTTP协议规定了报文的格式。 HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文”,服务器发送给客户端的称为“响应报文”。

2、http发展

由于http先后发布的版本有HTTP/0.9 、HTTP/1.0 、HTTP/1.1 、HTTP/2 、HTTP/3等,由于后面的内容基本都是基于HTTP/1.1版本的,所以本章节主要详细说明该版本。

2.1 HTTP/1.1 基本概念

(1)HTTP 的第一个标准化版本 HTTP/1.1(RFC 2068)于 1997 年初发布,支持七种请求方法OPTIONS, GET, HEAD, POST, PUT, DELETE, 和TRACE 。

(2)HTTP/1.1 是 HTTP 1.0 的增强:

  • 虚拟主机允许从单个IP 地址提供多个域;
  • 持久连接和流水线连接允许 web 浏览器通过单个持久连接发送多个请求;
  • 缓存支持节省了带宽并使响应速度更快。

(3)HTTP/1.1 在接下来的 15 年左右将非常稳定。

(4)在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP的安全版本。

2.2 HTTP协议的会话方式

浏览器与服务器之间的通信过程要经历四个步骤。

  • 浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
  • 浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

3、http长连接和短连接

3.1 前提条件

(1)http协议也称为 http/tcp/ip 协议,所以它是面向连接的协议:

  • http是应用层协议,它规定了数据有什么、数据格式是什么,但是怎么发它不管。
  • tcp是传输层协议,http默认使用tcp协议来传输数据。
  • ip是网络层协议,http通过ip地址来确定传输的对象。

(2)由于它是面向连接的协议,所以它连接的时候会出现三次握手,断开连接的时候会出现四次挥手。

3.2 长连接和短连接

上面仅仅是连接,那么长连接和短连接是什么呢?

首先看框框的代码

(1)短连接

(2)长连接

3.3 缓存

4、请求和响应报文

4.1 报文的格式

主体上分为报文首部和报文主体,中间空行隔开:

4.2 请求报文

(1)客户端发给服务端的报文:

(2)请求报文格式

  • 请求首行(请求行)。GET/POST 资源路径?参数 HTTP/1.1;
  • 请求头信息(请求头);
  • 空行;
  • 请求体;

(3)请求行:请求方式、资源路径、协议及版本。

(4)请求头

-主机虚拟地址

Host:localhost:8888

-长连接

Connection:keep-alive

-请求协议的自动升级[http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的]Upgrade-Insecure-Requests:1

-用户系统信息

User-Agent: Mozilla/5.8 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, like Gecko)Chrome/68.0.3440.75 Safari/537.36

-浏览器支持的文件类型

Accept:text/html,application/xhtml+xml,application/xml;q=0.9, image/webp, image/apng, */*;q=8.8

-当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:可以通过此路径跳转回上一个页面,告计费,防止盗链

Referer:http://localhost:8080/05_web_tomcat/login.html

-浏览器支持的压缩格式

Accept-Encoding:gzip, deflate, br

-浏览器支持的语言

Accept-Language:zh-CN,zh;q=0.9,en-uS;q=0.8,en;g=0.7

(5)请求体:使用form表单发送POST请求,请求体中才有数据。

4.3 响应报文

(1)服务端发给客户端的报文。

(2)响应报文格式:

  • 响应首行(响应行):协议/版本 状态码 状态码描述;
  • 响应头信息(响应头);
  • 空行;
  • 响应体。

(3)响应行:协议及版本、响应状态码、状态描述。

(4)响应头:

Server:Apache-Coyote/1.1 服务器的版本信息

Accept-Ranges:bytes

ETag: W/"157-1534126125811"

Last-Modified:Mon,13 Aug 2018 02:88:45 GMT

Content-Type:text/html 响应体数据的类型[浏览器根据类型解析响应体数据]

Content-Length:157 响应体内容的字节数

Date: Mon,13 Aug 2018 02:47:57 GMT 响应的时间,这可能会有8小时的时区差

(5)响应体,响应某个页面或者某张图片

(6)响应状态码:响应码对浏览器来说很重要,它告诉浏览器响应的结果。比较有代表性的响应码如下:

  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;
  • 304:使用了本地缓存;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 405:请求的方式不允许:。

5、GET 与 POST 区别

请求

GET

POST

后退按钮/刷新

无害

数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签

可收藏为书签

不可收藏为书签

浏览器缓存

能被缓存

不能缓存

编码类型

application/x-www-form-urlencoded

application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。

历史

参数保留在浏览器历史中。

参数不会保存在浏览器历史中。

对数据长度的限制

是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。


 

本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!

创作不易,如果对你有点帮助的话麻烦点个赞支持一下!

新手小白,欢迎留言指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【绘图软件】solidworks2022版本安装强制卸载(清理干净版!)全流程~超详细+报错避坑

安装包可以去【盒子部落】下载,也可以用下面网盘直接下载: 夸克网盘链接:https://pan.quark.cn/s/f2c110617bfa(无密码) 1.解压后进入文件夹 2.进入_SolidSQUAD_文件夹 3.复制SolidWorks_Flexnet_Server文件夹 4.打开C…

MySQL 的事务

事务概念 MySQL事务是一个或者多个的数据库操作,要么全部执行成功,要么全部失败回滚。 事务是通过事务日志来实现的,事务日志包括:redo log和undo log。 事务状态 事务有以下五种状态: 活动的部分提交的失败的中止的…

基于SpringBoot+Vue社区医院服务平台(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了社区医院信息平台的开发全过程。通过分析社区医院信息平台管理的不足,创建了一个计算机管理社区医院信息平台的方案。文章介绍了社区医院信息…

2024Guitar Pro 8.1 Mac 最新下载、安装、激活、换机图文教程

吉他爱好者必备神器:Guitar Pro v8.1.1 Build 17深度解析 随着数字音乐制作和学习的日益普及,越来越多的吉他爱好者开始寻找能够帮助他们提升技能、创作音乐的专业工具。在众多吉他制作软件中,Guitar Pro因其强大的功能和易用的界面备受推崇…

Qt 6子窗口全屏显示

一、全屏显示效果 二、全屏相关函数 1,全屏显示函数 QWidget::showFullScreen(); // 此方法只对顶级窗口有效,对子窗口无效 2,恢复显示函数 QWidget::showNormal(); // 此方法也只对顶级窗口有效,对子窗口无效 3,最小化显示函…

使用Flask和Flask-JWT-Extended保护API免受跨站请求攻击

在本文中,我们将探讨如何使用Flask和Flask-JWT-Extended库来保护您的API免受跨站请求攻击(CSRF)。我们将首先简要介绍CSRF攻击的概念,然后详细说明如何使用Flask-JWT-Extended库来保护您的API。 什么是跨站请求攻击(C…

【C++题解】1565. 成绩(score)

问题:1565. 成绩(score) 类型:基本运算、小数运算 题目描述: 牛牛最近学习了 C 入门课程,这门课程的总成绩计算方法是: 总成绩作业成绩 20% 小测成绩 30% 期末考试成绩 50%。 牛牛想知道&am…

聊聊应用商城评分4.9的Apipost IDEA插件

Apipost Helper,作为IDEA插件,可以快速生成和查询API文档,直观友好地在IDE中调试接口。它简化了开发流程并提升效率,即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能,如通过代码查找接口或者通过接口查找代…

C++教你如何模拟实现string,如何实现string写时拷贝

文章目录 前言成员变量默认成员函数默认构造函数拷贝构造函数析构函数赋值运算符重载 容量相关函数(Capacity)reserve函数resize函数size函数capacity 函数clear函数 修改函数(Modifiers)swap函数insert函数字符插入字符串插入 ap…

论文阅读-Federated-Unlearning-With-Momentum-Degradation

论文阅读-Federated Unlearning With Momentum Degradation 联邦忘却与动量退化 Yian Zhao IEEE Internet of Things Journal 2023 年 10 月 2 日 CCF-C momentum degradation-MoDe 动量退化 memory guidance-记忆引导 knowledge erasure-知识擦除 Deep-learning neural n…

【笔记】vscode debug进入site-packages包源码

选择左侧栏第三个图标,点击创建 launch.json 文件 选择 Python Debugger 选择Python文件 这里可以看到launch.json 文件 在configurations中添加键值对 "justMyCode": false在文件中打上断点,点击"三角符"号开始调试 按F11或者红框…

ROS 2边学边练(27)-- 创建一个launch文件

前言 ROS 2中的启动系统负责帮助用户描述其系统的配置,然后按描述执行。系统的配置包括运行什么程序,在哪里运行,传递什么参数,以及ROS特定的约定,这些约定通过为每个组件提供不同的配置,使其易于在整个系统…

[stm32]DMA使用

自动重装和M2M(软件trig)不能一起使用,否则会停不下来 void MyDMA_Init(uint32_t AddrA,uint32_t AddrB,uint16_t Size){RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);DMA_InitTypeDef DMA_InitStructure;DMA_InitStructure.DMA_PeripheralBaseAddrAddrA;//外…

go语言并发实战——日志收集系统(三) 利用sarama包连接KafKa实现消息的生产与消费

环境的搭建 Kafka以及相关组件的下载 我们要实现今天的内容,不可避免的要进行对开发环境的配置,Kafka环境的配置比较繁琐,需要配置JDK,Scala,ZoopKeeper和Kafka,这里我们不做赘述,如果大家不知道如何配置环境&#x…

STM32芯片flash被锁导致Error Flash Download failed Cortex-M4,解决办法(全)亲测有效

STM32芯片flash被锁导致Error: Flash Download failed - "Cortex-M4",解决办法(全)亲测有效🤩! 方法1:由于Keil 中debug的仿真器配置出错导致的下载失败(这种问题虽然是低级错误&…

友思特应用 | 红外视角的延伸:短波红外相机的机器视觉应用

导读 短波红外SWIR在不同波段针对不同材料的独特成像特征为各领域检测应用的拓宽提供了基础。本文将展现短波红外成像技术在水分检测、塑料检测、太阳能电池板检查和矿场开采等领域的丰富应用案例,讨论短波红外相机在未来的发展方向。 SWIR 背景简介 短波红外 &am…

基于SpringBoot+Vue的IT技术交流平台(源码+文档+包运行)

一.系统概述 我国科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分,使用计算机进行…

PHP货运搬家/拉货小程序二开源码搭建的功能

运搬家/拉货小程序的二次开发可以添加许多功能,以增强用户体验和提高业务效率。以下是一些可能的功能: 用户端功能: 注册登录:允许用户创建个人账户并登录以使用应用程序。货物发布:允许用户发布他们需要搬运的货物信息…

OpenHarmony实战开发-如何通过分割swiper区域,实现指示器导航点位于swiper下方的效果。

介绍 本示例介绍通过分割swiper区域,实现指示器导航点位于swiper下方的效果。 效果预览图 使用说明 1.加载完成后swiper指示器导航点,位于显示内容下方。 实现思路 1.将swiper区域分割为两块区域,上方为内容区域,下方为空白区…

HAL STM32 I2C方式读取MT6701磁编码器获取角度例程

HAL STM32 I2C方式读取MT6701磁编码器获取角度例程 📍相关篇《Arduino通过I2C驱动MT6701磁编码器并读取角度数据》🎈《STM32 软件I2C方式读取MT6701磁编码器获取角度例程》📌MT6701当前最新文档资料:https://www.magntek.com.cn/u…
最新文章