HTTP请求UML时序图--(POST)图和(GET)图源码分析及代码分析和MIME 介绍--常用的状态码说明

简介: HTTP请求UML时序图--(POST)图和(GET)图源码分析及代码分析和MIME 介绍--常用的状态码说明

WEB 开发通信协议-HTTP

什么是 HTTP 协议

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用广泛的一种网络协议。

是工作在 tcp/ip 协议基础上的,所有的 WWW 文件都遵守这个标准。

介绍

http1.0 短连接 http1.1 长连接

http 是 TCP/IP 协议的一个应用层协议,http 也是我们 web 开发的基础.

http 请求 hi.html 的 UML时序图

 

HTTP 请求包分析

1. HTTP 请求包分析(GET)图, 说明 可以通过浏览器抓包分析

  1. 请求行
  2. 请求头

 

 

2. 说明:HTTP 请求(GET)-有数据提交情况

代码说明

HTML部分

1. <!DOCTYPE html>
2. <html lang="en">
3. 
4. <head>
5. <meta charset="UTF-8">
6. <title>用户登录</title>
7. </head>
8. 
9. <body>
10. <h1>用户登录</h1>
11. <form action="http://localhost:8080/http/login" method="get">
12.         u: <input type="text" name="username" /><br />
13.         p: <input type="password" name="pwd" /><br />
14. <input type="submit" value="用户登录"> <input type="reset" value="清空">
15. </form>
16. </body>
17. 
18. </html>

JAVA部分

1. import javax.servlet.ServletException;
2. import javax.servlet.http.HttpServlet;
3. import javax.servlet.http.HttpServletRequest;
4. import javax.servlet.http.HttpServletResponse;
5. import java.io.IOException;
6. import java.io.PrintWriter;
7. 
8. public class LoginServlet extends HttpServlet {
9. protected void doPost(HttpServletRequest request, HttpServletResponse response)
10. throws ServletException, IOException {
11.         response.setContentType("text/html;charset=utf-8");
12. PrintWriter writer = response.getWriter();
13.         writer.print("<h1>登录成功~</h1>");
14.         writer.flush();
15.         writer.close();
16.     }
17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
18.             ServletException, IOException {
19.         response.setContentType("text/html;charset=utf-8");
20. PrintWriter writer = response.getWriter();
21.         writer.print("<h1>登录成功~</h1>");
22.         writer.flush();
23.         writer.close();
24.     }
25. 
26. }

web.xml部分

1. <servlet>
2. <servlet-name>LoginServlet</servlet-name>
3. <servlet-class>com.http.LoginServlet</servlet-class>
4. </servlet>
5. <servlet-mapping>
6. <servlet-name>LoginServlet</servlet-name>
7. <url-pattern>/login</url-pattern>
8. </servlet-mapping>

3) 完成测试,并抓包分析

HTTP 请求包分析(POST)

● HTTP POST 请求方式案例

1. 修改 上面的html, 将GET换成POST

(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. 在浏览器地址栏中输入地址后敲回车[用的比较多]

代码演示

1. <!DOCTYPE html>
2. <html lang="en">
3. 
4. <head>
5. <meta charset="UTF-8">
6. 
7. <!--通过 get 请求获取 my.css-->
8. <link rel="stylesheet" href="css/my.css">
9. 
10. <!--通过 get 请求获取 my.js-->
11. <script type="text/javascript" src="js/my.js"></script>
12. <title>用户登录</title>
13. </head>
14. 
15. <body>
16. <h1>用户登录</h1>
17. 
18. <!-- 给我们的 LoginServlet 发出 Get 请求提交表单, method=post 表示发出 post 请求
19. -->
20. <form action="http://localhost:8080/http/login" method="post">
21.         u: <input type="text" name="username" /><br />
22.         p: <input type="password" name="pwd" /><br />
23. <input type="submit" value="用户登录"> <input type="reset" value="清空">
24. </form>
25. 
26. <h1>GET 请求演示</h1>
27. <a href="http://www.baidu.com">goto 百度</a><br />
28. <!-- 是 get 请求 -->
29. <img src="imgs/1.png" width="400px" />
30. </body>
31. 
32. </html>

● POST 请求有

1. form 标签 method=pos

● HTTP 请求中怎样选择 Get 和 Post

传输的数据大小区别

       1) get 传送的数据量较小。不能大于 2KB(不同浏览器不一样)。

       2) post 传送的数据量较大。一般默认不受限制

什么情况下使用 post 请求

1) post 请求是会在浏览器上隐藏參数部分的,在安全要求的部分都会使用到 POST 请求。

如用户登录。数据增上改等等。都会把參数隐藏起来,这样就不会通过你的请求暴露你的參数格式。        比方:del?id=1,别人就能够用 del?=3 来删除你其它数据。

2)         在向 server 传递数据较大的时候id。使用 POST,

           get 是有限制的, 比如发帖, 上传文件

 

什么情况下使用 get 方式呢

1) 在前台页面展示,比如分页内容等,可以保留传递参数, 可用来非常好的分享和传播, POST 中链接地址是不变化的。

建议:

1) get 方式的安全性较 Post 方式要差些。包括机密信息的话。建议用 Post 数据提交方式;

2)   在做数据查询时。建议用 Get 方式;

     而在做数据加入、改动或删除时,建议用 Post方式

 

常用的状态码说明

状态行

1. 格式: HTTP版本号 状态码 原因叙述<CRLF>

2. 举例:HTTP/1.1 200 OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

 

演示 302 状态码使用

1. 举例说明 302 状态码的使用

1) 浏览器请求 T1Servelt

2) T1Servlet 返回 302 的状态码, 并且指定浏览器重定向到 hi.html

3) 浏览器发出第二次请求 hi.htm

 

演示 304 状态码使用

1. 演示 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:31GM

2.这时服务器就会比较时间,

       如果服务器的资源更新, 就会返回该资源 , 如果发现没有修改,就返回

304 状态码(但是不会返回该资源) http 请求机制

MIME 类型

MIME 介绍

1. MIME 是 HTTP 协议中数据类型。

MIME 的英文全称是"Multipurpose Internet Mail Extensions" 多功能 Internet 邮件扩充服务。MIME 类型的格式是"大类型/小类型",并与某一种文件的扩展名相对应

2. 在响应包的Content-Type 就有指定, 如图

 

常见的 MIME 类型

 


目录
相关文章
|
5月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
571 130
|
6月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
634 2
|
6月前
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
6月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
7月前
|
缓存 JavaScript 前端开发
Vue 3 HTTP请求封装导致响应结果无法在浏览器中获取,尽管实际请求已成功。
通过逐项检查和调试,最终可以定位问题所在,修复后便能正常在浏览器中获取响应结果。
304 0
|
7月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
518 0
|
9月前
|
JSON 安全 网络协议
HTTP/HTTPS协议(请求响应模型、状态码)
本文简要介绍了HTTP与HTTPS协议的基础知识。HTTP是一种无状态的超文本传输协议,基于TCP/IP,常用80端口,通过请求-响应模型实现客户端与服务器间的通信;HTTPS为HTTP的安全版本,基于SSL/TLS加密技术,使用443端口,确保数据传输的安全性。文中还详细描述了HTTP请求方法(如GET、POST)、请求与响应头字段、状态码分类及意义,并对比了两者在请求-响应模型中的安全性差异。
877 20
|
缓存 搜索推荐 网络协议
什么是http协议?有什么特点?有哪些状态码?
什么是http协议?有什么特点?有哪些状态码?
1754 2
|
缓存
一文搞懂HTTP协议状态码
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
217 0
一文搞懂HTTP协议状态码
http详解7-http协议之方法和状态码3状态码和数字
http详解7-http协议之方法和状态码3状态码和数字
224 0
http详解7-http协议之方法和状态码3状态码和数字