当前位置: 首页 > news >正文

HTTP协议入门

文章目录

      • 1. 概述
      • 2. 请求协议
        • 2.1 Get 方式请求协议
        • 2.2 POST 方式的请求
        • 2.3 获取请求数据
      • 3. 响应协议
        • 3.1 响应数据格式
        • 3.2 设置响应数据

1. 概述

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

  • 基于 TCP 协议:面向连接,安全
  • 基于请求-响应模型的:一次请求对应一次响应
  • HTTP 协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
    • 缺点:多次请求间不能共享数据
    • 优点:速度快

2. 请求协议

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

2.1 Get 方式请求协议

在这里插入图片描述

  • 请求行(以上图中红色部分) :HTTP请求中的第一行数据。由:请求方式资源路径协议/版本组成(之间使用空格分隔)
    • 请求方式:GET
    • 资源路径:/brand/findAll?name=OPPO&status=1
      • 请求路径:/brand/findAll
      • 请求参数:name=OPPO&status=1
        • 请求参数是以key=value形式出现
        • 多个请求参数之间使用&连接
      • 请求路径和请求参数之间使用?连接
    • 协议/版本:HTTP/1.1
  • 请求头(以上图中黄色部分) :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式
    • 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请求的请求参数在请求行中,故不需要设置请求体
2.2 POST 方式的请求

在这里插入图片描述

  • 请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本
    • 请求方式:POST
    • 资源路径:/brand
    • 协议/版本:HTTP/1.1
  • 请求头(以上图中黄色部分)
  • 请求体(以上图中绿色部分) :存储请求参数
    • 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

GET 请求和 POST 请求的区别

区别方式GET请求POST请求
请求参数请求参数在请求行中。
例:/brand/findAll?name=OPPO&status=1
请求参数在请求体中
请求参数长度请求参数长度有限制(浏览器不同限制也不同)请求参数长度没有限制
安全性安全性低。原因:请求参数暴露在浏览器地址栏中。安全性相对高
2.3 获取请求数据

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

@RestController  
public class RequestController {  
@RequestMapping("/request")  
    public String request(HttpServletRequest request){  
        //获取请求方式  
        String method = request.getMethod();  
        System.out.println("method = " + method);  
        //获取请求url地址(完整地址)  
        String url = request.getRequestURL().toString();  
        System.out.println("url = " + url);  
        //获取请求uri地址(资源访问路径)  
        String uri = request.getRequestURI();  
        System.out.println("uri ="+uri);  
        //获取请求协议  
        String protocol = request.getProtocol();  
        System.out.println("protocol = " + protocol);  
        //获取请求参数  
        String queryString = request.getQueryString();  
        System.out.println("queryString = " + queryString);  
        //获取请求头  
        String header = request.getHeader("User-Agent");  
        System.out.println("header = " + header);  
        return "success";  
    }  
}

运行结果如下
在这里插入图片描述

3. 响应协议

3.1 响应数据格式
  • 响应协议:服务器将数据以响应格式返回给浏览器。包括:响应行 、响应头 、响应体
    在这里插入图片描述

  • 响应行(以上图中红色部分):响应数据的第一行。响应行由协议及版本响应状态码状态码描述组成

    • 协议/版本:HTTP/1.1
    • 响应状态码:200
    • 状态码描述:OK
  • 响应头(以上图中黄色部分):响应数据的第二行开始。格式为key:value形式

    • http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,你想干什么
    • 常见的HTTP响应头有:
名称说明
Content-Type表示该响应内容的类型,例如 text/html,image/jpeg
Content-Length表示该响应内容的长度(字节数)
Content-Encoding表示该响应压缩算法,例如 gzip
Cache-Control指示客户端应如何缓存,例如 max-age=300 表示可以最多缓存 300 秒
Set-Cookie告诉浏览器为当前页面所在的域设置 cookie
  • 响应状态码
状态码分类说明
1xx响应中 — 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略
2xx成功 — 表示请求已经被成功接收,处理已完成
3xx重定向 — 重定向到其它地方,让客户端再发起一个请求以完成整个处理
4xx客户端错误 — 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
5xx服务器端错误 — 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等
关于响应状态码[[常用状态码大全]],我们先主要认识三个状态码,其余的等后期用到了再去掌握:
  • 200 ok 客户端请求成功
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务端发生不可预期的错误
3.2 设置响应数据

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

package com.itheima;

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 {

    @RequestMapping("/response")
    public void response(HttpServletResponse response) throws IOException {
        //1.设置响应状态码
        response.setStatus(401);
        //2.设置响应头
        response.setHeader("name","itcast");
        //3.设置响应体
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        response.getWriter().write("<h1>hello response</h1>");
    }

    @RequestMapping("/response2")
    public ResponseEntity<String> response2(HttpServletResponse response) throws IOException {
        return ResponseEntity
                .status(401)
                .header("name","itcast")
                .body("<h1>hello response</h1>");
    }

}

相关文章:

  • c# 委托和事件的区别及联系,Action<T1,T2>与Func<T1,T2>的区别
  • RTX 5060 Ti 3DMark跑分首次流出:比RTX 4060 Ti快20%
  • JVM——运行时数据区
  • Linux内核中struct net_protocol的early_demux字段解析
  • 谷歌A2A与Anthropic MCP: AI 智能体互补双协议
  • 【MySQL】MVCC工作原理、事务隔离机制、undo log回滚日志、间隙锁
  • mac中的zip文件压缩与压缩文件中指定目录删除
  • 【话题讨论】Python + AI图像生成实战:AI图像生成——用代码点亮数字艺术
  • Uipath获取最新下载文件
  • Express学习笔记(六)——前后端的身份认证
  • 嵌入式基础(三)基础外设
  • 论文阅读笔记——Generating Long Sequences with Sparse Transformers
  • Before After:SQL整容级优化
  • 学习八股的随机思考
  • Scratch037-(钢琴)
  • 数据库9(实验过程中补充学习)
  • 负氧离子是怎样产生的?
  • 百度网盘安卓版下载速度与储存体验分析
  • 2025年机电一体化、机器人与人工智能国际学术会议(MRAI 2025)
  • 解决在linux下运行rust/tauri项目出现窗口有内容,但是渲染出来成纯黑问题
  • 魔都眼|上海半马鸣枪:白金标运动员、“箱根之子”齐参赛
  • 海拔四百公里的救赎
  • “中国电三之都”江苏丰县成功举办第十五届电动车展览会
  • 河南社旗县委书记张荣印转任南阳市人大常委会农工委主任
  • 十四届全国人大常委会第十五次会议将于4月27日至30日举行
  • 14岁男孩膀胱内现52颗磁力珠,专家呼吁关注青春期少年心理健康