HTTP协议

 HTTP

HTTP概述

HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。

  • http是互联网上应用最为广泛的一种网络协议

  • http协议要求:浏览器在向服务器发送请求数据时,或是服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输

特点:

  • 基于TCP协议: 面向连接,安全(TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全)

  • 基于请求-响应模型: 一次请求对应一次响应(先请求后响应)

  • HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

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

  • 优点: 速度快

HTTP请求协议

介绍

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

  • 常见的HTTP请求头有:

    请求头

    含义

    Host

    表示请求的主机名

    User-Agent

    浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko

    Accept

    表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

    Accept-Language

    表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

    Accept-Encoding

    表示浏览器可以支持的压缩类型,例如gzip, deflate等。

    Content-Type

    请求主体的数据类型

    Content-Length

    数据主体的大小(单位:字节)

    • 请求体 :存储请求参数

      • GET请求的请求参数在请求行中,故不需要设置请求体

    GET请求和POST请求的区别:

    区别方式

    GET请求

    POST请求

    请求参数

    请求参数在请求行中。<br/>例:/brand/findAll?name=OPPO&status=1

    请求参数在请求体中

    请求参数长度

    请求参数长度有限制(浏览器不同限制也不同)

    请求参数长度没有限制

    安全性

    安全性低。原因:请求参数暴露在浏览器地址栏中。

    安全性相对高

    获取请求数据

    Web服务器(Tomcat)对HTTP协议的请求数据进行解析,并进行了封装(HttpServletRequest),并在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

    package org.example;
    
    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();
            System.out.println("请求方式:"+method);
            //2、获取请求url地址
            String url = request.getRequestURL().toString();
            System.out.println("请求地址:"+url);
            //3、获取请求协议
            String protocol = request.getProtocol();
            System.out.println("请求协议:"+protocol);
            //4、获取请求参数-name
            String name = request.getParameter("name");
            System.out.println("请求参数-name:"+name);
            //5、获取请求头
            String accept = request.getHeader("Accept");
            System.out.println("请求头:"+accept);
            return "OK";
        }
    }

    HTTP响应协议

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

    响应状态码
    状态码分类说明
    1xx响应中 --- 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略
    2xx成功 --- 表示请求已经被成功接收,处理已完成
    3xx重定向 --- 重定向到其它地方,让客户端再发起一个请求以完成整个处理
    4xx客户端错误 --- 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
    5xx服务器端错误 --- 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

    关于响应状态码,我们先主要认识三个状态码,其余的等后期用到了再去掌握:

    • 200 ok 客户端请求成功

    • 404 Not Found 请求资源不存在

    • 500 Internal Server Error 服务端发生不可预期的错误

    设置响应数据

    Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

    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(200);
            //2、设置响应头
            response.setHeader("name", "zhangsan");
            //3、设置响应体
            response.getWriter().write("hello world");
        }
    
        /*
        *方式二:ResponseEntity ---Spring中提供的方式
        */
        @RequestMapping("/response2")
        public ResponseEntity<String> response2() {
            return ResponseEntity
                    .status(200)
                    .header("name","javaweb-ai")
                    .body("<h1>hello world<h1>");
        }
    }

    响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值