- HTTP概述
- 概念:Hyper Text Transfer Protocol, 超文本传输协议, 规定了浏览器和服务器之间数据传输的规则
- 特点:
- 基于TCP协议: 面向连接,安全
- 基于请求-响应模型的: 一次请求对应一次响应
- HTTP协议是无状态的协议: 对于事物处理没有记忆能力。 每次请求-响应都是独立的。 缺点: 多次请求间不能共享数据。 优点: 速度快、
- HTTP-请求协议
GET /hello HTTP/1.1 (请求行: 请求数据第一行 包括了 请求方式, 资源路径, 协议)
(请求头: 第二行开始, 格式key:value)
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
Cache-Control: max-age=0
Connection: keep-alive
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/116.0.0.0 Safari/537.36 Edg/116.0.1938.62
常见的请求头:
Host 请求的主机名
User-Agent 浏览器版本
Accept 表示浏览器能接受的资源类型, 如text/*, image/* 或则*/*表示所有
Accept-Language 表示浏览器偏好的语言, 服务器可以据此返回不同语言的网页
Accept-Encoding 表示浏览器可以支持的压缩类型, 例如gizp,deflate等。
Content-Type 请求主体的数据类型。
Content-Length 请求主体的大小(单位: 字节)
请求体: POST请求, 存放请求参数
请求方法-GET: 请求参数在请求行, 没有请求体, 如:/brand/findAll?name=OPPO&status=1.GET请求大小是有限制的。
请求方式-POST:请求参数在请求体中, POST请求大小是没有限制的
JavaWeb中,GET和POST是HTTP协议中常用的两种请求方法,用于客户端与服务器之间的数据交互。它们在以下几个方面有所不同:
-
数据传输方式:
- GET:通过URL参数将数据附加在请求的URL后面,以查询字符串的形式传输。
- POST:将数据放在请求的消息体中进行传输,不会在URL上显示。
-
数据传输大小:
- GET:由于数据附加在URL上,对数据大小有限制,一般被限制在2KB - 8KB左右。
- POST:由于数据存在消息体中,对数据大小没有明确限制,可以传输较大的数据量。
-
安全性:
- GET:参数暴露在URL上,易于被拦截和窥视,不适合传输敏感信息。
- POST:参数在消息体中,相对安全一些,适合传输敏感信息。
-
缓存:
- GET:请求可以被浏览器缓存,下次发送相同请求时可直接使用缓存结果。
- POST:请求不会被浏览器缓存,每次都会重新发送请求。
-
应用场景:
- GET:适合用于数据查询、获取资源,对于无副作用、不涉及数据修改的操作。
- POST:适合用于数据提交、资源创建、数据修改等对服务器端产生副作用的操作。
- HTTP-响应格式
HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 10 May 2022 07:51:07 GMT
Keep-Alive: timeout=60
Connection: keep-alive
[{id: 1, brandName:"阿里巴巴", companyName: "腾讯计算机系统有限公司"}]
响应行: 响应数据第一行(协议, 状态码, 描述)
响应头: 第二行开始, 格式key: value
响应体: 最后一部分, 存放响应数据
1XX 响应中﹣临时状态码,表示请求已经接收,告诉客户端应该继续请求或者如果它已经完成则忽略它。
2XX 成功﹣表示请求已经被成功接收,处理已完成。
3XX 重定向﹣重定向到其他地方;让客户端再发起一次请求以完成整个处理。
4XX 客户端错误﹣处理发生错误,责任在客户端。如:请求了不存在的资源、客户端未被授权、禁止访问等。
5XX 服务器错误﹣处理发生错误,责任在服务端。如:程序抛出异常等。
Content-Type 表示该响应内容的类型,例如text/html, application/json。
Content-Length 表示该响应内容的长度(字节数)。
Content-Encoding 表示该响应压缩算法,例如gzip。
Cache-Control 指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒。
Set-Cookie 告诉浏览器为当前页面所在的域设置cookie。
常见的响应状态码:
200 OK:请求成功。表示服务器成功处理了请求,并返回了所请求的资源。
201 Created:请求已成功,并且服务器创建了新的资源。
204 No Content:请求成功,但响应报文中不包含实体的主体部分。
400 Bad Request:请求错误。服务器无法理解请求的语法或参数。
401 Unauthorized:未授权。请求要求身份验证。客户端需要提供有效的身份凭证。
403 Forbidden:禁止访问。服务器拒绝执行请求,因为客户端没有访问权限。
404 Not Found:未找到资源。服务器无法找到请求的资源。
405 Method Not Allowed:不允许的方法。请求中指定的方法不被允许。
500 Internal Server Error:服务器内部错误。服务器在执行请求时遇到了错误。
502 Bad Gateway:错误的网关。作为网关或代理服务器的服务器从上游服务器接收到无效的响应。
503 Service Unavailable:服务不可用。服务器暂时过载或维护,无法处理请求。
- HTTP-协议解析
-
TTP协议的一般解析流程:
-
客户端发起请求:
- 客户端通过建立TCP连接与服务器通信,默认使用的端口是80。
- 构建HTTP请求行,包括请求方法(GET、POST等)、请求的URI(Uniform Resource Identifier)和HTTP版本号。
- 构建HTTP请求头部(Headers),包含一些附加的信息,如请求的主机名、客户端信息、用户认证等。
- 根据需要,可以在HTTP请求正文中包含一些数据,例如表单提交、JSON数据等。
-
服务器处理请求:
- 服务器接收到请求后,解析请求行和请求头部,获取所需的信息。
- 服务器根据请求URI确定要处理的资源或执行的操作。
- 执行相应的处理逻辑,可能包括读取数据库、处理业务逻辑等。
- 构建HTTP响应。
-
服务器发送响应:
- 构建HTTP响应行,包括状态码(表示请求的处理状态)和版本号。
- 构建HTTP响应头部,包含一些附加的信息,如内容类型、内容长度、缓存控制等。
- 在HTTP响应正文中包含所需的数据,例如HTML页面、JSON数据等。
- 将整个HTTP响应发送回客户端。
-
客户端解析响应:
- 客户端接收到HTTP响应后,解析响应行和响应头部,获取所需的信息。
- 根据响应的状态码判断请求是否成功,并根据需要处理返回的响应头部。
- 解析响应正文中的数据,将其用于显示、处理或其他操作。
-