板块一 Servlet编程:第一节 HTTP协议理论与服务器请求响应原理 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程:第一节 HTTP协议理论与服务器请求响应原理

  • 一、HTTP特点
  • 二、HTTP中的 URL
  • 三、两种 HTTP 请求方法:GET 和 POST
  • 四、请求响应的底层
    • 请求头在服务器中表现
    • 响应头在服务器中表现

在上一个板块中我们完成了所有IDEA的基础配置工作,并且创建好了一个已经集成好Tomcat服务器的Java Web项目,从这个板块开始我们将逐步拆解Java的后端基石———Servlet,在正式讲解Servlet之前我们还有这一小节的知识储备要做
HTTP协议(超文本传输协议HyperText Transfer Protocol)

一、HTTP特点

  • 之所以叫超文本传输,是因为HTTP允许传输任意类型的数据对象,传输的类型由Content-Type加以标记
  • 客户端和服务端进行数据传输的一种规则,它是基于TCP协议的应用层传输协议
  • HTTP是无状态 (stateless) 协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率
  • 然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie

那么我们的HTTP协议位于WEB交互的哪个环节呢?
WEB交互的基本流程就是客户端发送请求给服务器,服务器又将响应的内容发回给客户端。
举一个栗子:可以想象成一个藏族人与一个傣族人要聊天,但一个说藏语一个说傣语自然是无法好好交流了,于是乎我们国家想了一个办法:使用普通话为官方语言,规范各族人民使用的语言、腔调,使得我们只要会讲普通话就能跟任意一个其他会讲普通话的人交流了。同样,为了保证客户端请求和服务端响应的两个过程都能被双方吸收理解,HTTP就是为请求和响应做出规范的一个协议,也就是让客户端和服务器都讲普通话,HTTP就是万维网的"普通话"。
在这里插入图片描述

二、HTTP中的 URL

在这里插入图片描述
上图中 浏览器就扮演了一个客户端角色,通过URL(Uniform Resource Locator)统一资源定位符,也就是网络中唯一标识的地址,用这个地址去访问对应的服务器
URL包含了用于查找某个资源的详细信息, 格式如

http://host[":"port][abs_path]
http://IP(主机名/域名):端口/访问的资源路径
http://www.baidu.com

其中

  • http表示要通过HTTP协议来定位网络资源;
  • host 表示合法的 Internet 主机域名或者IP地址;
  • port指定一个端口号,如果为空则使用默认端口80;
  • abs_path 指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成

三、两种 HTTP 请求方法:GET 和 POST

在继续讲解请求响应之前,我们需要贮备一些GET和POST方法的知识
GET 和 POST 就是客户端和服务器之间进行请求-响应时两种最常被用到的方法

  • GET - 从指定的资源请求数据
  • POST - 向指定的资源提交要被处理的数据

GET 提交参数一般显示在 URL 上,POST 通过表单提交不会显示在 URL 上,POST 更具隐蔽性
在这里插入图片描述
二者作比较
在这里插入图片描述
因此,GET和POST的应用场景可以总结为这个表
在这里插入图片描述

总的来说,

  • GET是用来查询数据,例如在浏览器中直接通通过地址访问服务器。
  • POST是用来修改数据。比方说,我们要在论坛上回贴、在博客上评论,这就要用到POST了,当然它也是可以仅仅获取数据的。

那么GET方法和POST方法是怎样在URL上被区分开,参数一个明文,另一个暗文的呢?请接着往下看GET和POST在服务器中的请求头有何区别

四、请求响应的底层

不禁要问,请求响应的过程在服务器中究竟是怎样实现的?
当我们在Google浏览器中输入URL,请求到百度服务器
在这里插入图片描述
在开发者工具中如图可以检查到当前服务器中的请求头和响应头
在这里插入图片描述

请求头在服务器中表现

由三个部分组成,他们分别是请求行请求头键值对请求正文(数据)

请求行请求方法GET或POST/.....请求地址....../协议及其版本三个部分组成

请求头键值对就是蓝色框中的内容,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有

  • User-Agent:产生请求的浏览器类型
  • Accept:客户端可识别的内容类型列表
  • Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
  • Referer: 保存着跳转之前的网站的URL

请求正文(数据)
注意!请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length

GET方法的整个请求头

//请求首行
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没有正文,所以下面为空

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

现在就解决了为什么GET 提交参数一般显示在 URL 上,POST 通过表单提交不会显示在 URL 上的问题

响应头在服务器中表现

HTTP响应也由三个部分组成,分别是:状态行、响应头、响应正文
在这里插入图片描述
响应行格式为HTTP-Version Status-Code Reason-Phrase CRLF
其中

  • HTTP-Version表示服务器HTTP协议的版本
  • Status-Code表示服务器发回的响应状态代码
  • Reason-Phrase表示状态代码的文本描述
    在这里插入图片描述
    响应头键值对每行一对,关键字和值用英文冒号“:”分隔。响应头部通知客户端器有关于服务端响应的信息,典型的响应头有
  • Connection: keep-alive 长链接保持存活状态
  • Content-Type: text/html;charset=utf-8 响应类型,这里是响应html格式
  • Location: 用于重定向接受者到一个新的位置。(这里就是之后要学重定向的内容中服务器的底层原理)如在Servlet中response. sendRedirect("http://www.baidu.com");
  • Refresh: 自动跳转(单位是秒),可以在页面通过meta标签实现,也可在后台实现。

响应正文 点击菜单中响应中的内容
在这里插入图片描述
可以看到
响应资源是一个html文件,在<html><head>头部中引入了站点下的多个其他的JS、CSS资源、使用内部样式表在<style>标签中定义了很多CSS样式在这里插入图片描述
HTML最终会将这些资源解析成我们在浏览器上看到的百度首页的样子

综上,此小节中我们系统的学习了HTTP协议的基本特点与请求响应在服务器上的原理,为接下来学习Servlet打下了良好的基础

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.0 Zookeeper 节点特性

本章节介绍一下 zookeeper 的节点特性和简单使用场景&#xff0c;正是由于这些节点特性的存在使 zookeeper 开发出不同的场景应用。 1、同一级节点 key 名称是唯一的 实例&#xff1a; $ ls / $ create /runoob 2 已存在 /runoob 节点&#xff0c;再次创建会提示已经存在。 …

APIfox自动化编排场景(二)

测试流程控制条件 你可以在测试场景中新增流程控制条件&#xff08;循环、判断、等待、分组&#xff09;等。进一步满足了更复杂的测试场景/流程配置的使用&#xff0c;最终借助自动化测试功能解决复杂场景的测试工作。 分组​ 当测试流程中多个步骤存在相关联关系时&#xf…

【Spring框架】Spring事务同步

目录 一、什么是Spring事务同步 二、 事务同步管理器 2.1 TransactionSynchronizationManager事务同步管理器 2.1.1 资源同步 2.1.2 事务同步 2.1.3 总结 三、事务同步管理器保障事务的原理 四、spring事务为何使用TransactionSynchronizationManager spring源码实现 …

【Linux】Shell编程

Shell编程 目录 Shell编程1.shell基础1.输入重定向 & 输出重定向2.管道3.特殊字符(3.1)通配符(3.2)引号(3.3)注释符(#) 4.别名5.命令历史history 2.Shell脚本Shell脚本的执行方式(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。(2)sh shell脚本名(…

LabVIEW与EtherCAT实现风洞安全联锁及状态监测

LabVIEW与EtherCAT实现风洞安全联锁及状态监测 在现代风洞试验中&#xff0c;安全联锁与状态监测系统发挥着至关重要的作用&#xff0c;确保了试验过程的安全性与高效性。介绍了一套基于EtherCAT总线技术和LabVIEW软件开发的风洞安全联锁及状态监测系统。该系统通过实时、可靠…

SegmentAnything官网demo使用vue+python实现

一、效果&准备工作 1.效果 没啥好说的&#xff0c;低质量复刻SAM官网 https://segment-anything.com/ 需要提一点&#xff1a;所有生成embedding和mask的操作都是python后端做的&#xff0c;计算mask不是onnxruntime-web实现的&#xff0c;前端只负责了把rle编码的mask解…

Web Services 服务 是不是过时了?创建 Web Services 服务实例

Web Services 是不是过时了&#xff1f; 今天是兔年最后一天&#xff0c;先给大家拜个早年 。 昨天上午视频面试一家公司需要开发Web Services 服务&#xff0c;这个也没有什么&#xff0c;但还需要用 VB.net 开发。这个是多古老的语言了&#xff0c;让我想起来了 10年 前 写 …

Eclipse安装配置、卸载教程(Windows版)

Eclipse是一个开放源代码的集成开发环境&#xff08;IDE&#xff09;&#xff0c;最初由IBM公司开发&#xff0c;现在由Eclipse基金会负责维护。它是一个跨平台的工具&#xff0c;可以用于开发多种编程语言&#xff0c;如Java、C/C、Python、PHP、Rust等。 Eclipse提供了一个可…

Android AOSP源码研究之万事开头难----经验教训记录

文章目录 1.概述2.Android源下载1.配置环境变量2.安装curl3.下载repo并授权4.创建一个文件夹保存源码5.设置repo的地址并配置为清华源6.初始化仓库7.指定我们需要下载的源码分支并初始化 2.1 使用移动硬盘存放Android源码的坑2.2 解决方法 3.Android源码编译4.Android源烧录 1.…

MySQL篇之回表查询

一、聚集索引 将数据存储与索引放到了一块&#xff0c;索引结构的叶子节点保存了行数据。特点&#xff1a;必须有,而且只有一个。 聚集索引选取规则: 1. 如果存在主键&#xff0c;主键索引就是聚集索引。 2. 如果不存在主键&#xff0c;将使用第一个唯一&#xff08;UNIQUE&am…

【开源】基于JAVA+Vue+SpringBoot的智慧社区业务综合平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预约业务模块2.4 反馈管理模块2.5 社区新闻模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 业务类型表3.2.2 基础业务表3.2.3 预约业务表3.2.4 反馈表3.2.5 社区新闻表 四、系统展…

深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)

在当今的大数据时代&#xff0c;高效的数据检索和分析能力已成为许多应用程序的核心需求。Elasticsearch&#xff0c;作为一款强大的分布式搜索和分析引擎&#xff0c;正是为了满足这些需求而诞生的。它之所以能够在海量数据中实现毫秒级的搜索响应&#xff0c;以及灵活的数据分…

Docker进阶篇-CIG重量级监控系统

一、简介 通过docker stats命令可以很方便的查看当前宿主机上所有容器的CPU、内存、网络流量等数 据&#xff0c;可以满足一些小型应用。 但是docker stats统计结果只能是当前宿主机的全部容器&#xff0c;数据资料是实时的&#xff0c;没有地方存储、 没有健康指标过线预警…

肯尼斯·里科《C和指针》第13章 高级指针话题(3)命令行参数

处理命令行参数是指向指针的指针的另一个用武之地。有些操作系统&#xff0c;包括UNIX和MS-DOS&#xff0c;让用户在命令行中编写参数来启动一个程序的执行。这些参数被传递给程序&#xff0c;程序按照它认为合适的任何方式对它们进行处理。 13.4.1 传递命令行参数 这些参数如何…

html5 audio video

DOMException: play() failed because the user didn‘t interact with the document first.-CSDN博客 不可用&#xff1a; 可用&#xff1a; Google Chrome Close AutoUpdate-CSDN博客

用HTML5实现灯笼效果

本文介绍了两种实现效果&#xff1a;一种使用画布&#xff08;canvas&#xff09;标签/元素&#xff0c;另一种不用画布&#xff08;canvas&#xff09;标签/元素主要使用CSS实现。 使用画布&#xff08;canvas&#xff09;标签/元素实现&#xff0c;下面&#xff0c;在画布上…

Compose | UI组件(十四) | Navigation-Data - 页面导航传递数据

文章目录 前言传参流程实例说明普通方式传值定义接受参数格式定义接受参数类型获取参数传入参数传参和接受参数效果图 结合 ViewModel 传递参数定义ViewModel在 navigation 定义 ViewModel 实例&#xff0c;并且传入 LoginScreen传入输入框中的值&#xff0c;并且跳转传值获取值…

Spring Authorization Server Spring Security密码加密

文章目录 一、修改密码编码器二、效果三、注意点1. RegisteredClient2. UserDetailsService 一、修改密码编码器 以BCryptPasswordEncoder举例。 直接将其注册成PasswordEncoder 的Bean即可。 Beanpublic PasswordEncoder passwordEncoder() {// 密码为明文方式 // ret…

“智能检测,精准把控。温湿度检测系统,为您的生活带来全方位的健康保障。”#非标协议项目【下】(分文件编程)

“智能检测&#xff0c;精准把控。温湿度检测系统&#xff0c;为您的生活带来全方位的健康保障。”#非标协议项目【下】&#xff08;分文件编程&#xff09; 前言预备知识1温湿度检测系统需求2.分文件编程核心思路3.分文件编程操作4利用分文件操作建立uart.c、lcd1602.c、dht11…

【图形图像的C++ 实现 01/20】 2D 和 3D 贝塞尔曲线

目录 一、说明二、贝塞尔曲线特征三、模拟四、全部代码如下​五、资源和下载 一、说明 以下文章介绍了用 C 计算和绘制的贝塞尔曲线&#xff08;2D 和 3D&#xff09;。    贝塞尔曲线具有出色的数学能力来计算路径&#xff08;从起点到目的地点的曲线&#xff09;。曲线的形…