Java Web基础知识(三)——HTTP协议

前言:在我们编写Servlet类的时候,实际上是不会去直接继承GenericServlet类(中间适配器类)的,因为我们是B/S架构的系统,这种系统是基于HTTP超文本传输协议的,在Servlet规范当中,提供了一个类叫做HttpServlet,它是专门为HTTP协议准备的一个Servlet类。

Servlet整体的继承结构如下:

Servlet(接口)爷爷辈
GenericServlet implements Servlet(抽象类)儿子辈
HttpServlet extends GenericServlet(抽象类)孙子辈

1、什么是HTTP协议?

HTTP协议又称为超文本传输协议,由万维网制定的,是处于应用层的一种协议,规定了信息传输的格式;

HTTP是基于B/S架构进行通信的,可以实现浏览器与服务器的解耦合。

总的来说,HTTP协议是W3C制定的超文本传输协议;B向S发送数据要遵循HTTP协议,同样S向B发送数据也要遵循HTTP协议,这样才能实现B与S的解耦合;简单的说,HTTP协议就是提前制定好的消息模板。要注意,HTTP协议是一种无状态协议。

2、HTTP协议的内容?

HTTP协议包括请求协议和响应协议两种。

2.1请求协议

请求协议包括请求行、请求头、空白行、请求体四部分。

Get请求具体报文:

GET /jeecg-boot/mdm/rejectsItem/queryPage?            current=1&size=50&queryItems=%255B%257B%2522val%2522:%2522123455%2522,%2522field%2522:%2522rejectsCode%2522,%2522rule%2522:%2522like%2522%257D%255D HTTP/1.1          请求行
Host: 127.0.0.1:3000                                                         请求头
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="8"
Accept: application/json, text/plain, */*
tenant-id: 0
sec-ch-ua-mobile: ?0
X-Access-Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NTg4MTM4MDMsInVzZXJuYW1lIjoiYWRtaW4ifQ.ZdHoOn8YZRYO751A47P6ze0GPHwUPfDFnNCEjxIp8k0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/30
Origin: http://localhost:3000
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9  
                                                                            空白行
                                                                            请求体

Post请求具体报文:

POST /jeecg-boot/sys/login HTTP/1.1                                           请求行
Host: 127.0.0.1:3000                                                          请求头
Connection: keep-alive
Content-Length: 86
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="8"
Accept: application/json, text/plain, */*
tenant-id: 0
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/30
Content-Type: application/json;charset=UTF-8
Origin: http://localhost:3000
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:3000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
                                                                               空白行

{"username":"admin","password":"123456","captcha":"","checkKey":"","remember_me":true}
                                                                               请求体        

2.1.1请求行

请求行由三部分组成:

请求方式:Get  Post  Put

URI:   /jeecg-boot/sys/login

协议版本号: HTTP/1.1

2.2响应协议

响应协议包括状态行、响应头、空白行、响应体四部分。

响应协议具体报文:


HTTP/1.1 200 OK                                                                 状态行          
X-Powered-By: Express                                                           响应头
access-control-allow-origin: http://localhost:3000
access-control-allow-methods: GET,POST,OPTIONS,PUT,DELETE
access-control-allow-credentials: true
set-cookie: rememberMe=deleteMe; Path=/jeecg-boot; Max-Age=0; Expires=Mon, 04-Jul-2022 09:37:57 GMT; SameSite=lax
vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
content-type: application/json
transfer-encoding: chunked
date: Tue, 05 Jul 2022 09:37:57 GMT
connection: close
                                                                                空白行

{"message":"success","code":0,"data":{"records":[{"id":"589055795316916224"}]   响应体

2.2.1状态行

状态行由三部分组成:

协议版本号:    HTTP/1.1

状态码:200(表示成功)

               404(表示访问的资源不存在,通常原因可能是路径错误或者服务器对应的资源没有启动成功)

               405(表示前端发送的请求方式与后端请求处理的方式不一致)

               500(表示服务器端的错误)

状态的描述信息:ok

2.2.2响应头

响应头包括响应的内容类型、响应的时间等

2.2.3空白行

空白行用来分隔响应头和响应体的

2.2.4响应体

响应体是响应的具体内容,通常是一段字符串,通过浏览器的渲染并最终展示出来

3、补充

3.1URL与URI

URI:统一资源标识符,代表网络中某个资源的名字,但是通过URI无法定位到资源

URL:统一资源定位符,代表网络中的某个资源,可以通过URL定位到资源

通常URL包括URI。

3.2Get请求与Post请求的区别

get请求发送数据的时候,数据会挂在URI后面,会在地址栏上显示;

post请求发送数据的时侯,在请求体中发送,不会回显在地址栏上;

get请求只能发送普通的字符串,并且发送的字符串长度有限制,不同的浏览器限制不同,这个没有明确的规范;

get请求无法发送大数据量;

post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、照片等;

post请求可以发送大数据量,理论上没有限制;

在W3C中是这样说的:get请求比较适合从服务器端获取数据;post请求比较适合向服务器端发送数据。因此,get请求是安全的,post请求是危险的;

get请求支持缓存;post请求不支持缓存;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值