JavaEE基础 Tomcat与Http (下)

news2025/3/13 22:08:53

目录

1.HTTP 协议

1.1 HTTP 协议概念

1.2. 无状态协议

1.3. HTTP1.0 和 HTTP1.1

1.4 请求协议和响应协议

​编辑

1.5 请求协议

 1.5.1 常见的请求协议

1.5.2 GET 请求

1.5.3 POST请求

1.5.4 响应协议


1.HTTP 协议

        Http浏览器访问东西都是遵循的Http协议。

1.1 HTTP 协议概念

        HTTP,即 超文本传输协议 。所有浏览器都可以发出 http 协议。
         协议 :就是规定的文本格式!例如写本书也要有格式,写总结也有格式。当然客户端发 送请求也要有格式,这个格式是已经约定的格式,所以服务器端按请求格式来获取请求信息, 然后服务器端再按照响应格式来响应,当然客户端还要按响应的格式来解析。

        例如:输入www.baidu.com进去之后,前面有http

1.2. 无状态协议

        HTTP 是 无状态协议 ,必须必须理解这一点!!!
        所谓无状态,就是客户端发送一个请求,服务器返回一个响应,然后就断开连接了。 无状态协议的好处,当然是 效率高 了,用户连接一下就断开,当用户再次发送请求时, 再连接,然后响应之后再次断开。如果用户在服务器上找到了自己想看的小说,那么服务器只是把小说的内容(html)发送给用户的浏览器,然后用户的浏览器显示已经发送到本地的 html,其实这时已经与服务器断开连接了。用户可能会看很久,但这不会占用服务器任何资源!

1.3. HTTP1.0 和 HTTP1.1

        HTTP 现在有两个版本,HTTP1.0 和 HTTP1.1。
        HTTP1.0:响应结束后会马上断开;          --打电话问一句回应一次关闭。
        HTTP1.1:必须在请求中包含 Host(主机)头信息,响应结束后不会马上断开,会有一个超时时间,可能会在超时之前完成多个请求/响应,当超时的时候就断开。           --打电话问一句回应不立马关闭,有一个超时时间,在这期间问多少都可以。
       

1.4 请求协议和响应协议

无论是请求协议还是响应协议,都是由如下部分构成的:
$$  请求(或响应)首行;
$$  请求(或响应)头信息;
$$  空行;
$$  请求(或响应)正文。  post请求有请求正文,get请求没有请求正文

常见状态码:
         404 not found :没有找到;
         500 error :找到了,但内部代码出错;
         200 ok :成功!  请求到了,不代表这个servlet以正常方式返回。

1.5 请求协议

我们可以通过浏览器来监视请求和响应,获取完整的请求和响应信息。
$$  Fire Fox:
$$  Google:内置了这功能,也无需安装。
请求
        GET /hello/index.jsp HTTP/1.1
响应

 1.5.1 常见的请求协议

1.5.2 GET 请求

        下面是通过 FireFox 获取到的请求信息,这就是浏览器发送给服务器的全部请求信息内 容。请求的地址是:http://localhost/hello/index.jsp
// 请求首行
GET /hello/index.jsp HTTP/1.1
// 下面全部是请求头信息,因为 GET 请求没有正文
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
// 空行,因为 GET 没有正文,所以下面没有东西了

 

        GET /hello/index.jsp HTTP/1.1: GET 请求,请求服务器路径为 /hello/index.jsp ,协议为 1.1;
        Host:localhost:请求的主机名为 localhost
        User-Agent: Mozilla/5.0 (Windows NT 5.1 ; rv:5.0) Gecko/20100101 Firefox/5.0 :与浏览
器和 OS 相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通
过获取 User-Agent 头信息而来的;
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告诉服务器,
当前客户端可以接收的文档类型,其实这里包含了 */* ,就表示什么都可以接收;
         Accept-Language: zh-cn,zh;q=0.5:当前客户端支持的语言,可以在浏览器的工具
项中找到语言相关信息;
         Accept-Encoding: gzip, deflate :支持的压缩格式。数据在网络上传递时,可能服务器
会把数据压缩后再发送;
        Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为 3000ms
        Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这
个地址,所以会在请求中把上一次服务器响应中发送过来的 Cookie 在请求中一并发
送去过;这个 Cookie 的名字为 JSESSIONID ,然后在讲会话是讲到它!
        Get 请求没有正文,只有头信息,请求参数是在请求的首行的 url 中传递的。请求的
参数的容量是有限的,不能超过 1024kb

1.5.3 POST请求

         下面是通过 POST 请求获取到的请求信息

// 请求首行 POST /hello/index.jsp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost/hello/index.jsp
Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
// 这里是空行
//POST 有请求正文
username=hello

         Referer: http://localhost/hello/index.jsp:请求来自哪个页面。这个值说明请求是从 index.jsp 页面发送出去的!这个东东还是比较有用的!如果这个表单的作用是下载, 那么在给用户提供资源之前可以去判断请求是从哪个页面发送过来的,如果不是从 本网站发送过来的,那么就可以拒绝下载,例如盗链!

        Content-Type: application/x-www-form-urlencoded :表单的数据类型,说明会使用 url
格式的 UTF-8 编码数据; url 编码的数据都是以“ % ”为前缀,后面跟随两位的 16
制;
        Content-Length:14:表示请求数据的长度,这里表示 14 个字节。
        username=hello:这是请求正文!hello 是在表单中输入的数据, username 是文本框
的名字。

1.5.4 响应协议

         响应信息:

// 响应首行
HTTP/1.1 200 OK
// 响应头信息
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 777
Date: Sat, 09 Feb 2012 18:30:52 GMT
// 空行,下面是响应正文,即 HTML 代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://localhost:80/hello/"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page. <br>
<form method="post" action="index.jsp">
<input type="text" name="username" /><br/>
<input type="submit" value="SUBMIT"/>
</form>
</body>
</html>
         HTTP/1.1 200 OK:响应协议为 HTTP1.1,状态码为 200,表示请求成功,OK 是对状
态码的解释;
        Server: Apache-Coyote/1.1:这是服务器的版本信息;
        Content-Type: text/html;charset=UTF-8:请求正文使用的编码为 UTF-8;
        Content-Length: 777:响应的内容为 777 字节;
        Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的 Cookie;
        Date: Sat, 09 Feb 2012 18:30:52 GMT:响应的时间,这可能会有 8 小时的时区差;
请求:GET/POST
        只有表单才可能是 POST,其他都是 GET
        POST 有正文,即表单内容:username=zhangSan&password=123
        GET 没有正文,但是空行可是有的!
请求首行
        (GET/POST) URL HTTP/1.1
响应首行
        HTTP/1.1 状态码 状态码的解释
响应的正文就是 HTML!
Post 请求:有正文,
        而且正文内容不受限制,通过表单的方式提交(除了表单方式的提交时 post 请求方式,其
余的都是 get 请求)。

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

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

相关文章

【Linux】【进程】epoll内核实现总结+ET和LT模式内核实现方式

【Linux】【网络】epoll内核实现总结ET和LT模式内核实现方式 1.epoll的工作原理 eventpoll结构 当某一进程调用epoll_create方法时&#xff0c;Linux内核会创建一个eventpoll结构体&#xff0c;这个结构体中有两个成员与epoll的使用方式密切相关. struct eventpoll{..../*红…

英码科技基于昇腾算力实现DeepSeek离线部署

DeepSeek-R1 模型以其创新架构和高效能技术迅速成为行业焦点。如果能够在边缘进行离线部署&#xff0c;不仅能发挥DeepSeek大模型的效果&#xff0c;还能确保数据处理的安全性和可控性。 英码科技作为AI算力产品和AI应用解决方案服务商&#xff0c;积极响应市场需求&#xff0…

【SQL】SQL约束

&#x1f384;约束 &#x1f4e2;作用:是用于限制存储再表中的数据。可以再创建表/修改表时添加约束。 &#x1f4e2;目的:保证数据库中数据的正确、有效性和完整性。 &#x1f4e2;对于一个字段可以同时添加多个约束。 &#x1f384;常用约束: 约束分类 约束 描述关键字非…

解决 `pip is configured with locations that require TLS/SSL` 错误

问题描述 在使用 pip 安装 Python 包时&#xff0c;可能会遇到以下错误&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.这意味着 Python 的 ssl 模块未正确安装或配置&#xff0c;导致 p…

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…

机器学习_18 K均值聚类知识点总结

K均值聚类&#xff08;K-means Clustering&#xff09;是一种经典的无监督学习算法&#xff0c;广泛应用于数据分组、模式识别和降维等领域。它通过将数据划分为K个簇&#xff0c;使得簇内相似度高而簇间相似度低。今天&#xff0c;我们就来深入探讨K均值聚类的原理、实现和应用…

从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)

论文链接&#xff1a;https://arxiv.org/pdf/2502.05179 项目链接&#xff1a;https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo&#xff0c;一种将视频生成解耦为两个目标的方法&#xff1a;提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…

Nuclei 使用手册

Nuclei 是一个开源的快速、高效的漏洞扫描工具&#xff0c;主要用于网络安全领域的漏洞检测。它由 go 语言开发&#xff0c;设计目的是为了高效地扫描 Web 应用程序、网络服务等目标&#xff0c;帮助安全研究人员、渗透测试人员以及红队成员发现潜在的漏洞。 下载链接&#xf…

python学opencv|读取图像(六十七)使用cv2.convexHull()函数实现图像轮廓凸包标注

【1】引言 前序学习进程中&#xff0c;已经初步探索了对图像轮廓的矩形标注和圆形标注&#xff1a; python学opencv|读取图像&#xff08;六十五&#xff09;使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客 但实际上&#xff0c;这两种标注方法都是大致的&#x…

基于SpringBoot的“高校创新创业课程体系”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校创新创业课程体系”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 个人中心界…

前端带样式导出excel表格,html表格生成带样式的excel表格

众所周知&#xff0c;前端生成表格通常是用xlsx、excel.js等js库&#xff0c;但这些库想要生成时增加excel样式会很麻烦。 有这么一个js库把html表格连样式带数据一并导出为excel表格: html-table-to-excel npm install html-table-to-excel 使用 html表格&#xff1a; <…

【Linux】【网络】Libevent 内核实现简略版

【Linux】【网络】Libevent 内核实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前&#xff0c;就必须先创建这个结构。 以epoll为例&#xff1a; 1.1evbase void* evbase-->epollop结构体&#xff08;以epoll为例&#xff09; libevent通过一个void…

VScode内接入deepseek包过程(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama&#xff0c;我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后&#xff0c;依次点击添加模型 5. 在这里可以添加&#xff0c;各种各样的模型&#xff0c;选择我们的ollama 6. 选…

Ubuntu虚拟机NDK编译ffmpeg

目录 一、ffmpeg源码下载1、安装git(用于下载ffmpeg源码)2、创建源码目录&#xff0c;下载ffmpeg源码 二、下载ubuntu对应的NDK&#xff0c;并解压到opt下1、下载并解压2、配置 ~/.bashrc 三、源码编译、1、创建编译脚本2、脚本文件内容3、设置可执行权限并运行4、编译的结果在…

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…

讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。

在信息爆炸的时代&#xff0c;智能语音问答系统正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着数据泄露事件的频发&#xff0c;用户对于隐私保护的需求日益增强。想象一下&#xff0c;一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音…

Day4 25/2/17 MON

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…

HTML【详解】input 标签

input 标签主要用于接收用户的输入&#xff0c;随 type 属性值的不同&#xff0c;变换其具体功能。 通用属性 属性属性值功能name字符串定义输入字段的名称&#xff0c;在表单提交时&#xff0c;服务器通过该名称来获取对应的值disabled布尔值禁用输入框&#xff0c;使其无法被…

Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改

本文目录 前言功能预览样式特点总结&#xff1a;1. 整体视觉风格2. 密码输入框设计3. 强度指示条4. 结果文本与原因说明 功能特点总结&#xff1a;1. 密码强度检测2. 实时反馈机制3. 详细原因说明4. 视觉提示5. 交互体验优化 密码强度检测逻辑Html代码Javascript代码 前言 能满…

用React实现一个登录界面

使用React来创建一个简单的登录表单。以下是一个基本的React登录界面示例&#xff1a; 1. 设置React项目 如果你还没有一个React项目&#xff0c;你可以使用Create React App来创建一个。按照之前的步骤安装Create React App&#xff0c;然后创建一个新项目。 2. 创建登录组…