javaweb http

news2024/11/29 0:34:24

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.coloradmin.cn/o/1603376.html

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

相关文章

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED (创建vue过程) 起因:卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前,使用npm更新或者安装啥的时,出现此类提示,则表明,用来验证和网络加…

使用GAN做图像超分——SRGAN,ESRGAN

在GAN出现之前,使用的更多是MSE,PSNR,SSIM来衡量图像相似度,同时也使用他们作为损失函数。 但是这些引以为傲的指标,有时候也不是那么靠谱: MSE对于大的误差更敏感,所以结果就是会倾向于收敛到期望附近&am…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(一主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…

使用嘉立创EDA打开JSON格式的PCB及原理图

一、将PCB和原理图放同一文件夹 并打包成.zip文件 二、打开嘉立创EDA并导入.zip文件 文件 -> 导入 -> 嘉立创EDA标准版/专业版 三、选择.zip文件并选择 “导入文件并提取库” 四、自定义工程路径 完成导入并转换为.eprj文件 五、视频教学 bilibili_使用立创EDA打开JSO…

Ansible 提示 sshpass 错误

错误的信息为: AILED! > {"msg": "to use the ssh connection type with passwords or pkcs11_provider, you must install the sshpass program"}问题和原因 这是在运行 ansible 的服务器需要安装 sshpass 组件。 可以直接运行&#xff1…

Xamarin.Android中“ADB0020: Android ABI 不匹配。你正将应用支持的“armeabi-v7a;arm64-v8a”异常处理

这里写自定义目录标题 1、问题2、解决 1、问题 在Xamarin.Android中出现ADB0020: Android ABI 不匹配。你正将应用支持的“armeabi-v7a;arm64-v8a”ABI 部署到 ABI“x86_64;x86”的不兼容设备。应创建匹配其中一个应用 ABI 的仿真程序,或将“x86_64”添加到应用生成…

web自动化系列-selenium 的鼠标操作(十)

对于鼠标操作 ,我们可以通过click()方法进行点击操作 ,但是有些特殊场景下的操作 ,click()是无法完成的 ,比如 :我想进行鼠标悬停 、想进行鼠标拖拽 ,怎么办 ? 这个时候你用click()是无法完成的…

论文解读:(CoOp)Learning to Prompt for Vision-Language Models

文章汇总 存在的问题 虽然训练类别通常具有文本形式,例如“金鱼”或“卫生纸”,但它们将被转换为离散标签,只是为了简化交叉熵损失的计算,从而使文本中的语义封装在很大程度上未被利用。这样的学习范式将视觉识别系统限制在闭集…

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

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

CSS简介与CSS选择器

目录 CSS简介 CSS语法规范 HTML引入CSS的方式 行内样式表 内部样式表 外部样式表 CSS选择器 CSS基础选择器 标签选择器 类选择器 单类名选择器 多类名选择器 id选择器 id选择器的使用 id选择器和类选择器的区别 通配符选择器 基础选择器总结 CSS简介 CSS 是层…

无风扇嵌入式车载电脑在矿山车辆行业应用

矿山车辆行业应用 背景介绍 现代的采矿业面临许多的挑战,其中最重要的就是安全性的问题,无论在矿井下或地面上的工作,都必须确保员工的安全保障。因此,先进的矿车必须整合专用的车载电脑,在极其恶劣的采矿环境中稳定运…

Python 数据结构和算法实用指南(三)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 第七章:哈希和符号表 我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效…

SQLite作为应用程序文件格式(二十八)

返回:SQLite—系列文章目录 上一篇:SQLite数据库中JSON 函数和运算符(二十七) 下一篇:SQLite—系列文章目录 摘要 具有定义架构的 SQLite 数据库文件 通常是一种出色的应用程序文件格式。 以下是十几个原因: 简化的应用程序开发单文…

Spring Cloud Gateway集成聚合型Spring Boot API发布组件knife4j,增强Swagger

大家都知道,在前后端分离开发的时代,前后端接口对接是一项必不可少的工作。 可是,作为后端开发,怎么和前端更好的配合,才能让自己不心累、脑累,直接扔给前端一个后端开放api接口文档或者页面,让…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

Elasticsearch:如何将 MongoDB 数据引入 Elastic Cloud

作者:Hemendra Singh Lodhi Elastic Cloud 是由 Elastic 提供的基于云的托管服务。Elastic Cloud 允许客户在亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure 上部署、管理和扩展他们的 Elasticsearch 集群。 MongoDB 是一种流行的 NoSQL 文档导向数据库&am…

(vue)el-select选择框加全选/清空/反选

(vue)el-select选择框加全选/清空/反选 <el-form-item label"批次"><el-selectv-model"formInline.processBatch"multiplecollapse-tagsfilterableplaceholder"请选择"style"width: 250px"no-data-text"请先选择企业、日…

React - 高级用法

React高级用法 Hooks Reducer useReducer&#xff1a; import React, { useReducer, useState } from react;const initialState { count: 0 };function reducer(state, action) {switch (action.type) {case increment:return { count: state.count 1 }case decrement:re…

获取公募基金持仓【数据分析系列博文】

摘要 从指定网址获取公募基金持仓数据&#xff0c;快速解析并存储数据。 &#xff08;该博文针对自由学习者获取数据&#xff1b;而在投顾、基金、证券等公司&#xff0c;通常有Wind、聚源、通联等厂商采购的数据&#xff09; 1. 导入必要的库&#xff1a; pandas 用于数据处理…

「Qt Widget中文示例指南」如何实现行编辑功能

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 Line Edits&#xf…