请求方式底层原理(POST与GET)

本文深入探讨了HTTP协议的请求方式,包括GET和POST的区别,HTTP协议的特性和版本差异。重点讲解了HttpServletRequest对象的使用,如何获取请求参数及处理请求参数的乱码问题,特别是POST和GET方法的乱码解决方案。此外,还介绍了HTTP请求的组成部分,如请求行、请求头和请求体,以及请求域的概念和操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 能够使用工具查看HTTP协议内容
  2. 能够理解HTTP协议请求内容
  3. 能够使用Request对象获取HTTP协议请求内容(重点)
  4. 能够处理HTTP请求参数的乱码问题 (重点)
  5. 能够使用Request域对象 (重点)

HTTP协议作用

HTTP协议就是用来传输HTML的。

默认端口号:80,可以省略。

注:8080是Tomcat的端口号

HTTPS是在HTTP的基础上加密的一种协议,更加安全,但传输效率相对要低一些。 它的端口号是:443

HTTP协议的特点:

  1. 简单快速:浏览器向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  2. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  3. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的响应后,即断开连接。采用这种方式可以节省传输时间。
  4. 无状态:HTTP协议是无状态协议。无状态是指协议对于业务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的响应就较快。

查看浏览器与服务器的通讯,按F12打开窗口
在这里插入图片描述
请求的组成
在这里插入图片描述
注:GET方法没有请求体,它的数据在请求行中传递

小结

请求由哪三个组成部分?分别是?

  1. 请求行
  2. 请求头:多个键和值组成
  3. 请求体:发送数据,只有POST才有。

请求信息的组成:请求行

目标

  1. 请求行的格式
  2. POST和GET请求的区别

请求行组成

三个部分:POST /login HTTP/1.1

请求方式 请求URI 协议和版本

关于HTTP1.0与1.1的区别

现在1.0已经淘汰,我们使用1.1的版本,HTTP是一个传输层的协议,是运行在TCP协议之上的。1.0是每次请求以后都会关闭TCP连接。HTTP1.1在同一时间对于同一个域名的请求数量有限制,超过限制就会阻塞请求。

POST与GET的区别

POST方式 GET方式
地址栏 不会,因为参数在请求体中传输 会显示提交参数值,因为参数是在请求行中传输
大小 理论上没有限制数据传输的大小 受浏览器限制,最大1024字节
安全性 相对比较安全 相对安全性低
缓存 邮寄,将客户端的数据发送给服务器 拿,表示浏览器从服务器去获取数据,可以使用缓存。
如果浏览器端之前已经访问过服务器上静态资源,下次访问它使用缓存,不再访问服务器。
通过状态码可以判断:如果是200表示从服务器得到数据,如果是304表示使用缓存。

小结

  1. 请求行由哪三个组成部分?

    请求的方式 URI 协议和版本

  2. GET方法和POST方法传递数据有什么区别?

    1. 哪个使用缓存?GET
    2. 哪个数据传输没有限制:POST
    3. POST在哪里发送数据:在请求体中

请求信息的组成:请求头、请求体

常用请求头

在这里插入图片描述

请求体

  1. GET:没有请求体
  2. POST:数据在请求体中发送

在这里插入图片描述

请求的方法:与请求行有关的方法

与请求行相关的方法

什么是HttpServletRequest对象

概述:这是一个接口,Oracle并没有对它进行具体的实现,由Tomcat等第三方Web容器厂商去实现它的类。我们只需要学习接口中的方法就可以了。
在这里插入图片描述
请求行相关的方法
在这里插入图片描述

需求

创建一个RequestLineServlet,用于获取请求行中相关信息的方法,并且输出到网页上。

效果

在这里插入图片描述

代码
package com.itheima.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "Demo1RequestLineServlet", urlPatterns = "/demo1")
public class Demo1RequestLineServlet extends HttpServlet {
   
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   
   
        System.out.println("请求对象:" + request);
        //得到请求的方式:get或post
        System.out.println("请求的方式:" + request.getMethod());
        //uri 统一资源标识符:只是一个名字不能直接访问
        System.out.println("得到请求的URI:" + request.getRequestURI());
        //url 统一资源定位符:一个可以直接访问的地址
        System.out.println("得到请求的URL:" + request.getRequestURL());
        System.out.println("得到协议和版本:" + request.getProtocol());
        //上下文地址:
        System.out.println("得到当前项目的访问地址:" + request.getContextPath());
        //默认是使用ipv6的格式: 0:0:0:0:0:0:0:1,ipv4本地是:127.0.0.1
        System.out.println("得到客户端的IP地址:" + request.getRemoteAddr());
        System.out.println("得到当前Servlet的访问地址:" + request.getServletPath());
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值