wordpress企业网站主题免费推广app工作好做吗
文章目录
- 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>");}}
