【JavaWeb】一篇文章学会HTTP

简介: 【JavaWeb】一篇文章学会HTTP

1、简介


1.1 请求和响应


学习HTTP之前,我们首先学习一下什么是请求和响应?


①发生在饭馆的请求和响应


6d9f1683ef1884589f8990e6ed17e774_img006.101afb76.png


②项目中的请求和响应


e2739048b7f46622f82d4bd7158ea270_img007.4bc9f5ad.png


1.2 HTTP概念


HyperText Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。


数据传输的规则指的是请求数据和响应数据需要按照指定的格式进行传输。

如果想知道具体的格式,可以打开浏览器,点击F12打开开发者工具,点击Network来查看某一次请求的请求数据和响应数据具体的格式内容,如下图所示:


8a53eef515b7a05c2cbd94933dbf2371_88dca4689543cbaddf42b21500a8f9c0.png


注意:在浏览器中如果看不到上述内容,需要清除浏览器的浏览数据。chrome浏览器可以使用ctrl+shift+Del进行清除。


学习HTTP主要就是学习请求和响应数据的具体格式内容。


1.3 HTTP协议特点


HTTP协议的特点如下:


基于TCP协议: 面向连接,安全


TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。


基于请求-响应模型的:一次请求对应一次响应


请求和响应是一一对应关系


HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的


无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点:


缺点:多次请求间不能共享数据

优点:速度快

请求之间无法共享数据会引发的问题,如:


京东购物,加入购物车和去购物车结算是两次请求,

HTTP协议的无状态特性,加入购物车请求响应结束后,并未记录加入购物车是何商品

发起去购物车结算的请求后,因为无法获取哪些商品加入了购物车,会导致此次请求无法正确展示数据

具体使用的时候,我们发现京东是可以正常展示数据的,原因是Java早已考虑到这个问题,并提出了使用会话技术(Cookie、Session)来解决这个问题。具体如何来做,我们后面会详细讲到。刚才提到HTTP协议是规定了请求和响应数据的格式,那具体的格式是什么呢?


2、 请求数据格式


2.1 格式介绍


请求数据总共分为三部分内容,分别是请求行、请求头、请求体


e2c263faca07bdc338ff34e9d5e3a077_a79199d91f8dbf6bab0756992dc88ddd.png


请求行: HTTP请求中的第一行数据,请求行包含三块内容,分别是 GET[请求方式] /[请求URL路径] HTTP/1.1[HTTP协议及版本]


请求方式有七种,最常用的是GET和POST


请求头: 第二行开始,格式为key: value形式


请求头中会包含若干个属性,常见的HTTP请求头有:


Host: 表示请求的主机名
User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;
Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。


这些数据有什么用处?


举例说明:服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求,比如:


不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果

服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果

这就是我们常说的浏览器兼容问题

请求体: POST请求的最后一部分,存储请求参数


5d30eddf77d288814217b36877fc82b4_b322bf6d00e962a9fa5a6ce2068796ac.png


如上图红线框的内容就是请求体的内容,请求体和请求头之间是有一个空行隔开。此时浏览器发送的是POST请求,为什么不能使用GET呢?这时就需要回顾GET和POST两个请求之间的区别了:


GET请求请求参数在请求行中,没有请求体,POST请求请求参数在请求体中

GET请求请求参数大小有限制,POST没有

小结:


请求数据中包含三部分内容,分别是请求行、请求头和请求体


POST请求数据在请求体中,GET请求数据在请求行上


3、响应数据格式


3.1 格式介绍


响应数据总共分为三部分内容,分别是响应行、响应头、响应体


693850950e3bc8ae120627c7f7dc41db_c0d87326e5e93855bbd2e68bf7c15a06.png


响应行:响应数据的第一行,响应行包含三块内容,分别是 HTTP/1.1[HTTP协议及版本] 200[响应状态码] ok[状态码的描述]


响应头:第二行开始,格式为key:value形式


响应头中会包含若干个属性,常见的HTTP响应头有:


Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
Content-Length:表示该响应内容的长度(字节数);
Content-Encoding:表示该响应压缩算法,例如gzip;
Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒


响应体: 最后一部分。存放响应数据


上图中<html>...</html>这部分内容就是响应体,它和响应头之间有一个空行隔开。


3.2 响应状态码


3.2.1 状态码大类


1684984561574.png


关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:


200 ok 客户端请求成功

404 Not Found 请求资源不存在

500 Internal Server Error 服务端发生不可预期的错误


小结


响应数据中包含三部分内容,分别是响应行、响应头和响应体


掌握200,404,500这三个响应状态码所代表含义,分布是成功、所访问资源不存在和服务的错误

相关文章
|
6月前
|
存储 JSON Shell
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
Grafana 系列文章(三):Tempo- 使用 HTTP 推送 Spans
|
缓存 网络协议
01JavaWeb基础 - HTTP介绍
01JavaWeb基础 - HTTP介绍
46 0
|
5月前
|
XML 网络协议 Java
JavaWeb -- HTTP -- WEB服务器TOMCAT
JavaWeb -- HTTP -- WEB服务器TOMCAT
|
2月前
|
Java 应用服务中间件 Maven
JavaWeb基础5——HTTP,Tomcat&Servlet
JavaWeb技术栈、HTTP、get和post区别、响应状态码、请求响应格数据式、IDEA使用Tomcat、报错解决、Servlet的体系结构、IDEA使用模板创建Servlet
JavaWeb基础5——HTTP,Tomcat&Servlet
|
3月前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
188 0
|
3月前
|
网络协议 编译器 Go
揭秘!TCP、RPC、gRPC、HTTP大PK,谁才是网络通信界的超级巨星?一篇文章带你秒懂!
【8月更文挑战第25天】本文以教程形式深入对比了TCP、RPC、gRPC与HTTP这四种关键通信协议,并通过Go语言中的示例代码展示了各自的实现方法。TCP作为一种可靠的传输层协议,确保了数据的完整性和顺序性;RPC与gRPC作为远程过程调用框架,特别适合于分布式系统的函数调用与数据交换,其中gRPC在性能和跨语言支持方面表现出色;HTTP则是广泛应用于Web浏览器与服务器通信的应用层协议。选择合适的协议需根据具体需求综合考量。
259 0
|
5月前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
84 1
|
4月前
|
Java 数据库连接 应用服务中间件
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
表单数据返回不到,HTTP状态 404 - 未找未找到,解决方法,针对这个问题,写一篇文章,理一下思路,仔细与原项目比对,犯错的原因是Mapper层的select查询表单数据写错,注意打开的路径对不对
|
5月前
|
Web App开发 缓存 安全
HTTP协议 -JavaWeb基础必知
HTTP协议 -JavaWeb基础必知
48 0
|
5月前
|
Java 应用服务中间件 程序员
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)
JavaWeb基础第四章(SpringBootWeb工程,HTTP协议与Web服务器-Tomcat)

热门文章

最新文章

下一篇
无影云桌面