HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输规则。
http是互联网上应用最为广泛的一种网络协议。
http协议要求:浏览器在向服务器发送请求数据时,或者当服务器在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输。
基于TCP协议:面向连接,安全
TCP是一种面向连接的(在连接之前需要经过三次握手)、可靠的,基于字节流的传输层通信协议,在数据传输方面更安全
基于请求-响应模型:一次请求对应一次响应(先请求后响应)
HTTP协议是无状态协议:对于数据没有记忆能力,每次请求或响应都是独立的
无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。
所有的HTTP 连接都被构造成一套请求和响应。
优点:速度快
缺点:多次请求之间不能共享数据
????????浏览器和服务器是按照HTTP协议进行数据通信的。
????????HTTP协议又分为:请求协议和响应协议
请求协议:浏览器将数据以请求格式发送到服务器
请求行
请求头
请求体
响应协议:服务器将数据以响应格式返回给浏览器
响应行
响应头
响应体
在HTTP1.1版本中,浏览器访问服务器的几种方式:
请求方式 | 请求说明 |
---|---|
GET | 获取资源。 向特定的资源发出请求。例:百度一下,你就知道 |
POST | 传输实体主体。 向指定资源提交数据进行处理请求(例:上传文件),数据被包含在请求体中。 |
在我们实际应用中常用的也就是 :GET、POST
GET方式的请求协议:
GET /simplepojo?name=tom&age=10 HTTP/1.1
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Cookie: Idea-5a6e92a8=fdff362c-2de9-41df-ab28-9983ad13115c
Host: localhost:8080
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
sec-ch-ua: "Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
请求行 :HTTP请求中的第一行数据。由:请求方式
、资源路径
、协议/版本
组成(之间使用空格分隔)
请求方式:GET
资源路径:/simplepojo?name=tom&age=10
请求路径:/simplepojo
请求参数:name=tom&age=10
请求参数是以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请求的请求参数在请求行中,故不需要设置请求体
POST方式的请求协议:
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 11 Date: Mon, 22 Jan 2024 14:16:33 GMT
Keep-Alive: timeout=60
Connection: keep-alive
{"name"=tom,"age"=10}
请求行(第一行):包含资源路径、协议/版本(注意这里省略了请求方式)
请求方式:POST
协议/版本:HTTP/1.1
请求状态码:200(正常状态)
请求头(第一行下面全部)
请求体(在浏览器中,是分离出来的) :存储请求参数
请求体和请求头之间是有一个空行隔开
GET请求和POST请求的区别:
区别方式 | GET请求 | POST请求 |
---|---|---|
请求参数 | 请求参数在请求行中。 例:/simplepojo?name=tom&age=10 | 请求参数在请求体中 |
请求参数长度 | 请求参数长度有限制(浏览器不同限制也不同) | 请求参数长度没有限制 |
安全性 | 安全性低。原因:请求参数暴露在浏览器地址栏中。 | 安全性相对高 |