http协议
本文最后更新于14 天前,其中的信息可能已经过时,如有错误请发送邮件到1169063119@qq.com

http协议

概念:超文本传输协议,规定了浏览器和服务器之间数据传输的规则

  1. http是互联网上应用最为广泛的一种网络协议
  2. http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输

特点:

  1. 基于tcp协议:面向连接,安全
  2. 基于请求-响应模型的:一次请求对应一次响应(先请求后响应)
  3. http协议是无状态的协议:对于事物处理没有记忆能力。每次请求-响应都是独立的

优点:速度快

缺点:多次请求之间不能共享数据

HTTP请求协议

Get请求协议:

浏览器将数据以请求格式发送到服务器。包括:请求行、请求头 、请求体

请求行:HTTP请求中的第一行数据。

请求头(以上图中黄色部分) :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式 。

请求体 :存储请求参数

POST方式的请求协议:

请求行、请求头、请求体

请求行:包含请求方式、资源路径、协议/版本

  1. 请求方式:POST
  2. 资源路径:/brand
  3. 协议/版本:HTTP/1.1

请求头

请求体 :存储请求参数

GET请求和POST请求的区别:

获取请求

Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),并在调用Controller方法的时候传递给了该方法

HTTP响应协议

响应协议:服务器将数据以响应格式返回给浏览器。包括:响应行 、响应头 、响应体

响应行:响应数据的第一行。

  1. 协议/版本:HTTP/1.1
  2. 响应状态码:200
  3. 状态码描述:OK

响应头:响应数据的第二行开始。格式为key:value形式

响应体: 响应数据的最后一部分。存储响应的数据,响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

响应状态码

设置响应数据

Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。

User.txt

1,daqiao,1234567890,大乔,22,2024-07-15 15:05:45
2,xiaoqiao,1234567890,小乔,18,2024-07-15 15:12:09
3,diaochan,1234567890,貂蝉,21,2024-07-15 15:07:16
4,lvbu,1234567890,吕布,28,2024-07-16 10:05:15
5,zhaoyun,1234567890,赵云,27,2024-07-16 11:03:28
6,zhangfei,1234567890,张飞,31,2024-07-16 11:03:28
7,guanyu,1234567890,关羽,34,2024-07-16 12:05:12
8,liubei,1234567890,刘备,37,2024-07-16 15:03:28

RequestController

package org.example;

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RequestController {

    @RequestMapping("/request")
    public  String request(HttpServletRequest request) {
//        1.获取请求方式
           String method = request.getMethod(); //get
            System.out.println("method:" + method);

//        2.获取请求路径(url)
            String url = request.getRequestURL().toString(); //localhost:8080/request
            System.out.println("url:" + url);

//            2.1获取uri
            String uri = request.getRequestURI();  //request
            System.out.println("uri:" + uri);

//        3.获取协议
            String protocol = request.getProtocol(); //HTTP/1.1
            System.out.println("protocol:" + protocol);

//        4.获取请求参数
            String name = request.getParameter("name"); //name=zhangsan
            String age = request.getParameter("age");
            System.out.println("name:" + name + ",age" + age);

//        5.获取请求头
            String accept = request.getHeader("Accept"); //Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537
            System.out.println("accept:" + accept);
            return "ok";
    }
}

ResponseController

package org.example;

import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class ResponseController {

//    第一种方式:使用HttpServletResponse 设置响应数据

    @RequestMapping("/response")
    public void response(HttpServletResponse response) throws IOException {

//        1.设置响应状态码
        response.setStatus(401);

//        2.设置响应头
        response.setHeader("name", "songxiaofang");

//        3.设置响应体
        response.getWriter().write("hello");
    }

//    第二种方式:使用ResponseEntity 设置响应数据

    @RequestMapping("/response2")
    public ResponseEntity<String> response2() {
        return ResponseEntity
                .status(401)  //响应状态码
                .header("name", "songxiaofang") //响应头
                .body("<h1>hello</h1>");
    }
}

HelloController

package org.example;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(String name) {
        System.out.println("name:" + name);
        return "Hello" + name;
    }
}
文末附加内容
上一篇
下一篇