HTTP协议要点总结

一、什么是 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 类型

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值