搜索 K
Appearance
博客正在加载中...
Appearance
在继续学习 JavaWeb 之前,我们来复习下 HTTP 基础,HTTP 也是一个很重要的知识
HTTP 全称 Hyper Text Transfer Protocol,译为超文本传输协议。
HTTP 是一种传输协议,定义了客户端和服务器端通信时,发送数据的格式。浏览器请求服务器,其实就是发送一些数据给到服务器;服务器响应浏览器,也是发送一些数据。HTTP 就是定义了格式。
HTTP 协议特点:
1.0:每一次请求响应都会建立新的连接。例如访问某个网站,实际上会有多次请求、多次相应。例如下载 logo,JS 资源,HTML 文件。请求完一个文件后会断开连接,非常影响传输的效率(因为 TCP 建立连接是需要花时间的)
例如访问本站 从 01 开始,打开浏览器控制台,可以看到有很多个请求(每一行都是一个 HTTP 请求)
1.1:对 1.0 的升级版,会复用连接,比如请求完后,不会马上断开,而是会等待一会,如果还有请求发送过来,则使用该连接。目前 HTTP 1.1 使用广泛。然后 1.1 和 1.0 的区别还有很多,我们目前只介绍一个 我们目前介绍下请求消息的数据格式,后续再介绍响应消息的数据格式
分为四部分:
http://localhost:8080/hello/ServletHttpDemo1Post.jsp
也就是我们请求资源的时候,发送给服务器的数据如下:
GET /hello/ServletHttpDemo1Post.jsp HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Cookie: JSESSIONID=45EE153467713CD348E7512827D1548C; Hm_lvt_267c5680c2ffb468ca29c45ffe6801da=1676989465; Hm_lvt_935c298d3de674300e25695d1ece4c34=1677722338,1678069169,1678670145,1679275245; Hm_lpvt_935c298d3de674300e25695d1ece4c34=1679276128
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"请求行的格式:请求方式 请求 url 请求协议/版本
例如上述例子中,请求行为: GET /hello/ServletHttpDemo1Post.jsp HTTP/1.1
请求方式:HTTP 协议有 7 中请求方式,常用的有 2 种
GET:
POST:
请求头:客户端浏览器告诉服务器一些信息。格式为键值格式,冒号分割: 请求头名称: 请求头值。请求头与请求行没有分隔符
POST /hello/httpDemo1 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: JSESSIONID=E7758AAD07EED8A7EC11AAC37512B9EF; Hm_lvt_267c5680c2ffb468ca29c45ffe6801da=1676989465; Hm_lvt_935c298d3de674300e25695d1ece4c34=1677722338,1678069169,1678670145,1679275245; Hm_lpvt_935c298d3de674300e25695d1ece4c34=1679276128
Host: localhost:8080
Referer: http://localhost:8080/hello/ServletHttpDemo1Post.jsp
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows" 常见的请求头作用:
空行,就是用于分割 POST 请求的请求头和请求体的。
请求体(正文):封装 POST 请求消息的请求参数的(例如:username = peterjxl),
如果用 get 则没有请求体,参数直接在请求行中。例如我们将刚刚的表单改为 get
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试post请求</title>
</head>
<body>
<form action="/hello/httpDemo1" method="get">
<span>用户名:</span><input type="text" name="username" placeholder="请输入用户名">
<input type="submit" value="点击发送post请求">
</form>
</body>
</html> 然后尝试发送: