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

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

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

在上一个板块中我们完成了所有IDEA的基础配置工作,这个板块开始我们将逐步拆解JAVA的后端基石———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方法是怎样在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.mzph.cn/news/671520.shtml

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

相关文章

挑战杯 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

【PTA选择题/基础夯实/期末复习】链表文件操作

2-1 对于一个头指针为head的带头结点的单链表&#xff0c;判定该表为空表的条件是&#xff08;&#xff09;。 A.headNULL B.head→nextNULL C.head→nexthead D.head!NULL 2-2 链表不具有的特点是&#xff08;&#xff09;。 A.可随机访问任一元素 B.插入、删除不需要移…

第 383 场 LeetCode 周赛题解

A 边界上的蚂蚁 模拟 class Solution { public:int returnToBoundaryCount(vector<int> &nums) {int s 0;int res 0;for (auto x: nums) {s x;if (s 0)res;}return res;} };B 将单词恢复初始状态所需的最短时间 I 枚举&#xff1a;若经过 i i i 秒后 w o r d w…

CTF-show WEB入门--web19

今晚web19也就顺便解决了 老样子我们先打开题目看看题目提示&#xff1a; 可以看到题目提示为&#xff1a; 密钥什么的&#xff0c;就不要放在前端了 然后我们打开题目链接&#xff1a; 然后我们查看网页源代码&#xff1a; 可以发现有用的内容全在网页源代码里。 前端验证…

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!--…

(十三)springboot实战——springboot前后端分离方式项目集成spring securtity安全框架

前言 Spring Security 是一款强大且高度可定制的认证和访问控制框架&#xff0c;它是为了保护基于Spring的应用程序提供安全性支持。Spring Security提供了全面的安全服务&#xff0c;主要针对企业级应用程序的需求。其核心组件主要包含&#xff1a;Authentication&#xff08…

获取 Github XX项目软件最新版本方法(通过命令行)

场景&#xff1a; 如果我们项目中需要实现某个Github公共软件的最新版本更新 那么获取软件的最新的发布版本就是一个比较重要的工作了 对此&#xff0c;Github提供对外api不需要自己手动填写脚本了 解决方案&#xff1a; 替换黄色字体的项目地址&#xff0c;然后在cmd中执行…

CentOS 7安装Nodejs

说明&#xff1a;本文介绍如何在云服务器上CentOS 7操作系统上安装Nodejs。以及安装过程中遇到的问题。 下载压缩包&解压 首先&#xff0c;先去官网下载Linux版本的Node。 将下载下来的压缩包&#xff0c;上传到云服务器上&#xff0c;解压。配置环境变量。 &#xff08…

Leetcode 45. 跳跃游戏 II

本题与55. 跳跃游戏十分类似&#xff0c;区别在于本题是要求出最小的跳跃次数。 在55. 跳跃游戏的框架上&#xff0c;我们需要增加一些东西&#xff1a; 既然要计算最小跳跃次数&#xff0c;就需要用一个变量计数跳跃的次数&#xff1b;需要一次前瞻&#xff0c;来计算之后那次…

力扣经典题:相交链表

题目分析&#xff1a;两个链表如果相交且不存在环&#xff0c;那么这两个链表从相交节点往后的节点都相同&#xff0c;所以&#xff0c;遍历一个链表&#xff0c;在遍历时不断遍历另一个链表&#xff0c;只要相等就可以返回了 struct ListNode *getIntersectionNode(struct Li…

使用 git 上传文件时,运行 命令 git pull origin 时未成功,出现报错信息

项目场景&#xff1a; 背景&#xff1a; 使用 git 上传文件时&#xff0c;运行 命令 git pull origin 时未成功&#xff0c;出现报错信息 问题描述 问题&#xff1a; $ git pull origin print --allow-unrelated-histories error: Pulling is not possible because you hav…

《C程序设计》上机实验报告(七)之指针的应用

实验内容&#xff1a; 1.运行程序 #include <stdio.h> void main() { int a10,*p; p&a; printf("%d",*p); scanf("%d",p); printf("%x",p); printf("%x",&p); *p5; printf("%d"…

React+Echarts实现数据排名+自动滚动+Y轴自定义toolTip文字提示

1、效果 2、环境准备 1、react18 2、antd 4 3、代码实现 原理&#xff1a;自动滚动通过创建定时器动态更新echar的dataZoom属性startValue、endValue&#xff0c;自定义tooltip通过监听echar的鼠标移入移出事件&#xff0c;判断tooltTip元素的显隐以及位置。 1、导入所需组…

Linux安全技术与iptables防火墙

一.安全技术&#xff1a; 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,…

IDEA上传Gitee出错

问题 今天想通过 IDEA 更下新 gitee 上的代码是发生了这个错误。 解决 在 IDEA 终端输入 git config --system --unset credential.helper原因 在一个大佬那里找到了原因 大概意思是-远端仓库的账号和密码错误&#xff0c;你本地有过账号密码登录记录&#xff0c;但不知道…

Leetcode—60. 排列序列【困难】

2024每日刷题&#xff08;113&#xff09; Leetcode—60. 排列序列 算法思想 实现代码 class Solution { public:string getPermutation(int n, int k) {vector<int> nums(n);// f[i] i!vector<int> f(n 1, 1); string ans;iota(nums.begin(), nums.end(), 1…

搜索与图论(一)(深搜,广搜,树与图的存储遍历,拓扑排序)

一、DFS 往深里搜&#xff0c;搜到叶子结点那里&#xff0c;回溯&#xff0c;到可以继续到叶子结点深搜的位置。 1、回溯一定要恢复现场 2、定义一个与当前递归层数有关的终止条件&#xff08;题目要求的东西&#xff09; 3、每层都用循环判断是否存在可以dfs的路 输出数字…

架构学习(五):scrapy实现自定义代理中间件

scrapy实现自定义代理中间件 前言关卡&#xff1a;实现自定义代理中间件代理中间件源码解析代理池自定义代理中间件 结束 前言 ip检测是比较常规的反爬手段&#xff0c;一般站点会限制ip的访问频率&#xff0c;或者根据ip的访问规律和频率来识别异常访问&#xff0c;从而点对点…

【数据结构】二叉树的顺序结构及实现(堆)

1.二叉树的顺序结构 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两…

腾讯云游戏联机服务器配置价格表,4核16G/8核32G/4核32G/16核64G

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…