JavaEE day8 初识HTTP

news2024/11/17 11:37:35

HTTP协议

HTTP协议,又称超文本传输协议,是一种应用广泛的应用层协议。所谓超文本,其实就是除了文本还能传输其他资源。而HTTP本身是基于传输层的TCP协议实现的。目前HTTP协议3版本已经在完善中。本文采用1.1版本。

它是一种请求--响应的工作模式,浏览器处于主动地位,服务器处于被动地位。

当我们在浏览器中输入一个 搜狗搜索的 "网址" (URL) 时, 浏览器就给搜狗的服务器发送了一个 HTTP 请 求, 搜狗的服务器返回了一个 HTTP 响应. 这个响应结果被浏览器解析之后, 就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送 多个 HTTP 请求, 服务器会对应返回多个响应, 这些响应里就包含了页面 HTML, CSS, JavaScript, 图片, 字 体等信息).

浏览器通过URL请求资源可能出现四种结果:

1.URL中指定的web服务器进程不存在

2.进程存在但是对应的路径资源不存在

3.资源也存在,但是处理响应的过程中发生错误,大多为动态资源

4.完成响应

HTTP请求

URL格式:

协议://主机:端口/路径?查询字符串

请求(request)

请求里的内容要足够承载我们的诉求——web服务器能看到的所有东西都在请求中,其他的看不到

1.本次请求的是哪个URL

2.本次请求的动作:是从浏览器提交内容给服务器,还是浏览器从服务器取东西

3.本次请求遵循哪个版本的HTTP协议

4.本次请求的一些专门的描述

5.如果本次请求是从浏览器向服务器提交内容,内容放哪里?

请求格式:

请求行 请求头们 --请求方法--请求资源URL--请求版本--可能的请求体

 

一个请求 = 请求行  请求头   请求体  其中请求行必须存在,其他可以不存在

请求行 = 请求方法 空格 请求资源URL/路径 空格 请求协议版本 \r\n

请求头们 = 请求头\r\n请求头\r\n...请求头\r\n\r\n(最后一个\r\n是空白行)

请求头 = Name:Value\r\n

请求体没有格式要求

HTTP为文本协议:请求就是一个字符串,写出如下,经过网络发送给指定的web服务器进程

 

请求的主体是客户端

请求方法

 在浏览器中输入URL按下回车发起的就是GET请求,表单提交时可以使用post请求

<a href = ".....">  <img src = "...">都是get请求

方法使用为method = “方法名称”

GET与POST

1.GET与POST都是i请求方法:GET:取  POST:提交

2.所有资源都有一个特性:资源支持被什么方法请求

3.对于浏览器

        1.POST请求:from表单+method=”POST“、使用JS的ajax、还有其他工具

        2.GET请求:浏览器地址栏+回车/刷新/标签关联

4.GET请求不会有请求体(不能有)POST允许有(可以没有)

5.GET请求最好是具备幂等性  POST请求一般不具备幂等性

幂等性:在不考虑外部环境变化的前提下,对同一个资源多次请求,总是得到相同的结果。

SQL中select就具备幂等性,无论select多少次都是相同的结果

但是insert就不具备,一次插入成功第二次可能就失败了

另外,select的幂等性不具备副作用,不会有别的作用发生,而update具备幂等性就有副作用。

6.由于GET请求具备幂等性,使得GET请求允许被缓存,缓存的结果用于下一次查询

而POST不具备幂等性,不允许缓存

7.from既可以使用get也可以使用post提交数据,但表现上有所区别:

        1.get上不允许携带请求体,使得要提交的数据只能放到URL的查询字符串中

 

        2.post请求允许携带请求体,所以,提交的数据一般都是放在请求体中,url保持为/path(也可放在查询字符串中)

请求头

Name:Value\r\n

HTTP协议并没有死规定过Name与Value是什么,所以这里的name和value可以自行去写,但是一些常见的name有约定成俗的规定。

HOST:124.0.0.1:8080   主机   网络建立连接  连接到一个具体的web服务器进程,由于这个进程下有多个主机,所以这个HOST请求头表示我们要请求的是哪个主机下的资源

Content-XXX请求头 /响应头 描述请求头/响应头 的特征的

Content: 指的是body 请求是请求体,响应是响应体

Content-Length :body的长度,字节为单位

Content-Type:body的内容类型(有严格规定—MIMI type)如果希望对象(如果是响应,则对象是浏览器)按照指定类型格式处理响应的内容,就在Content-Type指定即可


响应

响应的主体是服务器,由服务器收到一次请求后被动发起。

服务器能响应一次的请求的前提:浏览器发起的请求满足:

1.主机存在

2.端口存在

3.没有防火墙阻拦网络连接

格式

响应行=状态(状态码+状态描述)      响应的协议版本信息

响应头=Name:Value\r\n.......Name:Value\r\n\r\n

响应体=资源的内容(一般响应都是有响应体的)

 

 无论是谁,只要遵守HTTP请求/响应的格式,都可以正常通信。


结合动态资源

动态资源在springMVC中主要体现为

一个方法,这个方法必须:

1.这个方法属于一个类,这个类被@Controller注解修饰

2.这个方法必须被@RequestMapping注解修饰,并且通过这个注解制定了资源的路径(该资源路径全工程不能重复且为绝对路径)

进行配置

web服务器中的资源,唯一路径,静态资源一般支持get和post方法,动态资源一般是进行配置,不配置则全支持。

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

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

相关文章

MyBatis 持久层框架详细解读:Mapper代理开发

文章目录1. 前言2. Mapper 代理开发3. 过程剖析4. 总结1. 前言 前面在 MyBatis 快速入门篇中&#xff0c;我们使用了 MyBatis 原生的开发方式操作数据库&#xff0c;解决了 JDBC 操作数据库时的硬编码和操作繁琐的问题。实际上&#xff0c;在 Java 项目中&#xff0c;我们更常…

MVC和MVVM的区别

一、MVC mvc&#xff1a;是一种代码架构设计模式&#xff0c;前端中的mvc最主要的作用就是将视图和数据模型进行分离 &#xff08;1&#xff09; 为什么需要 MVC 简单理解&#xff1a;也就是为什么需要将视图和数据模型进行分离 <select id"drinkSelect">&…

宕机后,如何避免 Redis 的数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

Lua 文件I/O

Lua 文件I/O 参考至菜鸟教程。 Lua I/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件相关的操作。完全模式&#…

C++Primer13.6.2节练习

练习13.49&#xff1a; StrVec类的移动构造函数和移动赋值运算符 //移动构造函数 StrVec::StrVec(StrVec&& s)noexcept :elements(s.elements), first_free(s.first_free), cap(s.cap) {//令移后源对象进入状态-----对其运行析构函数是安全的s.elements s.first_fre…

关于网络编程

Socket套接字Socket API是网络编程最核心的部分。Socket套接字是由系统提供用于网络通信的技术&#xff0c;是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。Socket API与传输层密切相关&#xff0c;由于传输层有UDP和TCP两种协议类型…

使用Idea中将单个java类打包成jar包

开工第一天&#xff0c;正在暗自爽&#xff0c;领导让帮个忙&#xff0c;给一个工具类打成jar包&#xff0c;供其他项目组使用&#xff0c;这就开始了尝试。 其实网上已经有好多人写过了&#xff0c;只是尝试了几篇&#xff0c;坑得不轻&#xff0c;自己做下笔记&#xff0c;留…

表格控件Aspose.Cells for .NET 授权须知

支持的平台 Aspose.Cells 可作为 .NET、Java、C 和 Python 的四种不同产品使用&#xff0c; .NET Framework.NET Standard 2.0Xamarin.AndroidXamarin.iOSXamarin.MacCOMMonoWindows Azure Aspose.Cells 下载&#xff08;qun&#xff1a;761297826&#xff09;https://www.ev…

python 高阶函数

传入函数 要理解“函数本身也可以作为参数传入”&#xff0c;可以从Python内建的map/reduce函数入手。 我们先看map。map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的l…

Java:基于注解的Spring使用【AOP容器】和事务管理

目录 第十五章 AOP前奏15.1 代理模式15.2 为什么需要代理【程序中】15.3 手动实现动态代理环境搭建15.4 手动实现动态代理关键步骤第十六章 Spring中AOP【重点】16.1 AspectJ框架【AOP框架】16.2 使用AspectJ步骤&#xff08;入门&#xff09;16.3 Spring中AOP概述16.4 Spring中…

AMQP 0-9-1 模型解释

官方文档链接&#xff1a;https://www.rabbitmq.com/tutorials/amqp-concepts.html 文章目录1. AMQP协议是什么2. AMQP模型2.1 工作过程2.2 深入理解3. 交换机3.1 默认交换机3.2 直连交换机3.3 扇形交换机3.4 主题交换机3.5 头交换机3.6 交换机小结4. Queue队列队列属性队列创建…

BM7 链表中环的入口结点

目录 描述 输入描述&#xff1a; 返回值描述&#xff1a; 示例1 示例2 示例3 思路&#xff1a; 代码 描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 例如&#xff0c;输入{1,…

DW 2023年1月Free Excel 第九次打卡 Excel数据透视

第九章 Excel数据透视 数据下载地址与参考链接&#xff1a;https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 数据透视是Excel中个强大的数据处理和分析工具&#xff0c;能够快速实现数据的汇总与统计分析&#xff0c;本节重点讲解Excel数据透视的相关操作。 1…

NSSCTF Round#7 Team ez_rce和0o0讲解

强烈建议NSSCTF延长时间&#xff0c;大过年的逛亲戚回来就剩两个小时了。。。。 ez_rce <!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW --> <!-- By 探姬 --> <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_s…

MySQL8中jdbc的url设置

JDBC spring.datasource.urljdbc:mysql://${MYSQL_HOST:localhost}:3306/xxxx?sslModeREQUIRED&characterEncodingUTF-8&connectionTimeZoneGMT%2B8&forceConnectionTimeZoneToSessiontruesslMode:设置为REQUIRED表示必须启用ssl加密传输&#xff1b;characterEn…

svn客户端add无法添加上子文件夹及其子文件——解决办法

1、问题描述 svn客户端add文件夹后&#xff0c;无法添加上子文件夹及其子文件&#xff0c;需要先add最外层文件夹&#xff0c;再逐层add子文件夹&#xff0c;最后add最里层子文件夹中的文件&#xff0c;很影响add速度啊。现象如下图所示&#xff1a; 正常情况下&#xff0c;add…

公派访问学者申请优势有哪些?

人的一生&#xff0c;若从职业生涯论&#xff0c;无非为官、为学、为商三条路。为官者&#xff0c;出国访学一年半载&#xff0c;对仕途并无太大作用&#xff0c;并且在此期间有可能丧失国内提拔的大好机会;为学者&#xff0c;公派访问学者是对学术水平的认可&#xff0c;并且对…

vue.js 实现导入json解析成动态el-table树表格(接口文档功能)

一、需求描述&#xff1a;前段时间接到一个需求是做一个类似接口文档的显示功能&#xff0c;将一段json数据贴到里面就可以自动解析出json数据的每个字段的类型和层级关系&#xff0c;用element组件的树表格的形式展示&#xff0c;并且可以手动新增、修改和删除某个数据字段。二…

Vue路由和路由器简介

前言 路由(route)是vue中非常重要的技术&#xff0c;几乎每一个用vue所写的项目都会用到路由&#xff0c;它是一个vue的插件库&#xff0c;专门实现SPA应用 路由(route)的简介 说到路由&#xff0c;大多数人会想到路由器(router),可以这么说&#xff0c;路由器上的每一个口都…

Python类变量和实例变量

类变量&#xff08;类属性&#xff09;类变量指的是在类中&#xff0c;但在各个类方法外定义的变量。举个例子&#xff1a;class CLanguage : # 下面定义了2个类变量name "CSDN社区"add "http://csdn.net" # 下面定义了一个say实例方法 defsay(self, conte…