一、什么是 HTTP 协议
1.
超文本传输协议
(HTTP
,
HyperText Transfer Protocol)
是互联网上应用广泛的一种网络协议。
是工作在
tcp/ip
协议基础上的
,
所有的
WWW
文件都遵守这个标准。
2. http1.0
短连接
http1.1
长连接
3. http 是 TCP/IP 协议的一个应用层协议,http 也是我们 web 开发的基础.
二、快速入门 HTTP 协议
1.
看一个
hi.html
页面
<h1>hello, http</h1>
2.
使用火狐浏览器抓取
Http
请求和相应数据包
[
演示
]
快捷键
ctrl+shift+i
3. 使用 chrome 浏览器抓取 Http 请求和相应数据包[演示]
4. 画出 http 请求 hi.html 的 UML 时序图
三、页面请求的一个问题(分析)
创建
test.html
页面
<h1>abc</h1>
<img src="1.jpg"/>
<img src="2.jpg"/>
●
当访问
test.html
页面时
,
问浏览器发出几次
http
请求
?
1
次,
2
次,
3
次
答:一共
3
次
解读:
(1)
第一次请求的
test.html
(2)
当浏览器解析发现
test.html
中有
<
img
src
="imgs/1.png"
width
="300px"
>
<
img
src
="imgs/2.png"
>
(3)
会向服务器继续发请求,要
1.png
和
2.png,
一共
3
次
●
抓包说明
四、HTTP 请求包分析(GET)
1. HTTP
请求包分析
(GET)
图
,
说明 可以通过浏览器抓包分析
请求行
请求头
2.
说明:
HTTP
请求
(GET)-
有数据
提交情况
WEB
程序员要学会分析
Http
包
!
【】
案例说明:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="http://localhost:8080/http/login" method="get">
u: <input type="text" name="username"/><br/>
p: <input type="password" name="pwd"/><br/>
<input type="submit" value="用户登录"> <input type="reset" value="清空">
</form>
</body>
</html>
package com.hspedu.http;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class haha extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print("<h1>登录成功~</h1>");
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.hspedu.http.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
完成测试,并抓包分析
五、HTTP 请求包分析(POST)
案例说明:
1.
修改
login.html,
将提交方式改成
post
2.
完成测试
, HTTP
请求包分析
(POST)
图
六、GET 请求 POST 请求分别有哪些?
● GET 请求有哪些
1. form
标签
method=get [
指定]
2. a 标签
3. link
标签引入
css [
以
get
方式来获取资源]
4. Script
标签引入
js
文件
[
以
get
方式来获取资源]
5. img
标签引入图片
[
以
get
请求来获取图片]
6. iframe
引入
html
页面
[
不演示]
7. 在浏览器地址栏中输入地址后敲回车
[
用的比较多]
● POST 请求有哪些
1. form
标签 method=post
● HTTP 请求中怎样选择 Get 和 Post 方式
说明:在大部分情况下,我们不需要考虑这个问题,因为业务本身就会自动区别,
比如你要显示图片,引入
css/js
这个天然的就是
get
请求,比如你登录,发帖,上传文
件, 你就会使用
post(
感情的自然流露
)
传输的数据大小区别
1) get
传送的数据量较小。不能大于
2KB(
不同浏览器不一样
)
。
2) post
传送的数据量较大。一般默认不受限制。
什么情况下使用
post
请求
1) post
请求是会在浏览器上隐藏參数部分的,在安全要求的部分都会使用到
POST
请求。
如用户登录。数据增上改等等。都会把參数隐藏起来,这样就不会通过你的请求暴露你
的參数格式。
比方:
del?id=1
,别人就能够用
del?id=3
来删除你其它数据。
2)
在向
server
传递数据较大的时候。使用
POST
,
get
是有限制的
,
比如发帖
,
上传文件
什么情况下使用
get
方式呢
1)
在前台页面展示,比如分页内容等,可以保留传递参数
,
可用来非常好的分享和传播
,
POST
中链接地址是不变化的
建议:
1) get
方式的安全性较
Post
方式要差些。包括机密信息的话。建议用
Post
数据提交方式;
2)
在做数据查询时。建议用
Get
方式;而在做数据加入、改动或删除时,建议用
Post
方式
七、HTTP 响应包分析
● HTTP 响应包括 3 个部分
1.
响应行
2.
响应头
3.
响应体
● HTTP 响应包分析图
八、常用的状态码说明
状态行
1.
格式:
HTTP
版本号 状态码 原因叙述
<CRLF>
2.
举例:
HTTP/1.1 200 OK、
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为
5
类,如下所示:
1.演示 302 状态码使用
1.举例说明
302
状态码的使用
1)
浏览器请求
T1Servelt
2) T1Servlet
返回
302
的状态码
,
并且指定浏览器重定向到
hi.html
3)
浏览器发出第二次请求
hi.html
2.
代码写完
3.
测试抓包
package com.hspedu.http.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class T1Servlet extends HttpServlet {
//这里我们把 doGet和doPost合并处理
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//如果有一个请求来
//重定向到hi.html
//(1) 返回302状态码 (2) 响应头Location:/hi.html
//response.sendRedirect("/http/hi.html");
response.sendRedirect("http://www.baidu.com");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
2.演示 304 状态码使用
当我们请求资源的时,服务器会返回该资源的最近修改时间
Last-Modified: Mon, 21 Feb 2022 04:51:31 GMT
如果浏览器禁用缓存
,
这个
Last-Modified:
信息就没有使用
,
浏览器就每次要求返回该资源
1.
如果浏览器没有禁用缓存
, 浏览器在请求时,就会 If-Modified-Since: Mon, 21 Feb 2022 04:51:31 GMT,
含义(1
) 告诉服务器我有该资源
(2)
该资源的最近修改时间是
Mon, 21 Feb 2022 04:51:31
GM
2.
这时服务器就会比较时间,如果服务器的资源更新, 就会返回该资源
,
如果发现没有修改,就返回 304 状态码(
但是不会返回该资源
) http
请求机制
九、MIME 类型
1.MIME 介绍
1.MIME
是
HTTP
协议中数据类型。
MIME
的英文全称是
"Multipurpose Internet Mail Extensions" 多功能
Internet
邮件扩充服务。
MIME
类型的格式是
"
大类型
/
小类型
"
,并与某一种文件的扩展名相对应
2.
在响应包的
Content-Type
就有指定
,
如图
2.常见的 MIME 类型