HTTP协议详解
HTTP协议:是W3C制定的一种超文本传输协议。(是一种通信协议:发送消息的模板提前被制定好。)就是服务器和浏览器互相发送消息的模板。
HTTP协议:是W3C制定的一种超文本传输协议。(是一种通信协议:发送消息的模板提前被制定好。)就是服务器和浏览器互相发送消息的模板。
HTTP协议包括:
1、请求协议
浏览器 向 WEB服务器发送数据的时候,这个发送的数据需要遵循一套标准,这套标准中规定了发送的数据具体格式。
2、响应协议
WEB服务器 向 浏览器发送数据的时候,这个发送的数据需要遵循一套标准,这套标准中规定了发送的数据具体格式。
HTTP的请求协议
请求行
第一部分:请求的方式method(有7种)
get(常用的)
post(常用的)
delete
put
head
options(预检请求)
trace
第二部分:URI
什么是URI? 统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
什么是URL?统一资源定位符。代表网络中某个资源的位置,同时,通过URL是可以定位到该资的。
第三部分:HTTP协议的版本号
请求头
HTTP请求头包含了HTTP请求的元数据,用于告诉服务器如何处理请求和发送响应。下面是一些常见的HTTP请求头字段及其含义:
-
User-Agent:标识客户端浏览器、操作系统及版本号等信息。
-
Accept:表示客户端可以接受的数据类型。例如:"text/html"、"application/xml"等。
-
Accept-Encoding:表示客户端可以接受的数据压缩格式。例如:"gzip"、"deflate"、"br"等。
-
Accept-Language:表示客户端可以接受的语言类型。例如:"en-US"、"zh-CN"等。
-
Cache-Control:控制缓存的行为。例如:"no-cache"、"max-age=3600"等。
-
Connection:表示客户端与服务器之间连接的类型。例如:"keep-alive"、"close"等。
-
Host:表示请求的服务器的域名或IP地址和端口号。
-
Referer:表示请求来源的URL地址。
-
Cookie:表示客户端发送给服务器的Cookie信息。
-
Authorization:表示客户端发送的身份验证凭证信息。
-
Content-Length:表示请求体的长度。
-
Content-Type:表示请求体的类型。例如:"application/x-www-form-urlencoded"、"application/json"等。
Content-Type
HTTP请求头中的 Content-Type 字段用于指定请求体的媒体类型(media type),即请求体的数据格式。下面是一些常见的 Content-Type 值:
text/plain:纯文本,没有格式。
text/html:HTML 格式。
application/json:JSON 格式。
application/xml:XML 格式。
application/x-www-form-urlencoded:经过 URL 编码的表单数据。
multipart/form-data:用于上传文件、图片和二进制数据的表单格式。
image/png:PNG 图像格式。
image/jpeg:JPEG 图像格式。
audio/mpeg:MPEG 音频格式。
video/mp4:MPEG-4 视频格式。
空白行
用来区分"请求头"和"请求体"的
请求体
浏览器向服务器发送的具体数据.
HTTP请求协议的具体报文:GET请求
GET /Servlet05/get?username=lucy&userpwd=123 HTTP/1.1 请求行
Host: localhost:8080 请求头
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Idea-69292d60=aab66041-a5ec-4720-bd7d-906d53381ec2
空白行
请求体
HTTP请求协议的具体报文:POST请求
POST /Servlet05/post HTTP/1.1 请求行
Host: localhost:8080 请求头
Connection: keep-alive
Content-Length: 27
Cache-Control: max-age=0
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
Origin: http://localhost:8080
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost:8080/Servlet05/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: Idea-69292d60=aab66041-a5ec-4720-bd7d-906d53381ec2
空白行
username=jack&userpwd=11111 请求体
HTTP的响应协议
状态行
由三部分组成:
-
第一部分:协议版本号(HTTP/1.1)
-
第二部分:状态码(HTTP协议中规定的响应状态号。不同的响应结果对应不同的号码。)
-
200 表示请求响应成功,正常结束。
-
404表示访问的资源不存在,通常是因为要么是你路径写错了,要么是路径写对了,但是服务器中对应的资源并没有启动成功。总之404错误是前端错误。
-
405表示前端发送的请求方式与后端请求的处理方式不一致时发生:
-
比如:前端是POST请求,后端的处理方式按照get方式进行处理时,发生405
-
比如:前端是GET请求,后端的处理方式按照post方式进行处理时,发生405
-
500表示服务器端的程序出现了异常。一般会认为是服务器端的错误导致的。
-
以4开始的,一般是浏览器端的错误导致的。
-
以5开始的,一般是服务器端的错误导致的。
-
第三部分:状态的描述信息
-
ok 表示正常成功结束。
-
not found 表示资源找不到。
响应头
Content-Type
响应的内容类型,告诉浏览器这个响应的内容类型,浏览器就知道怎么处理。
Content-Type:text/html;charset=UTF-8
告诉客户端,资源文件的类型,还有字符编码,客户端就会通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
// 设置响应头,告诉浏览器这是一个字节流,浏览器处理字节流的默认方式就是下载
response.setContentType("application/octet-stream");
Content-Disposition
// Content-Disposition 是 HTTP 协议中的一个头部字段,用于指示文件的名称和下载方式。
// inline 表示文件应该在浏览器中直接显示,而不是下载。
//attachment 表示文件应该下载到本地。
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
- 响应的内容长度
- 响应的时间
- ....
空白行
区分"响应头"和"响应体"
响应体
响应体就是服务器响应给浏览器的正文,这些内容是一个长的字符串,这个字符串被浏览器解析渲染,解释并执行,最终展示出效果。
HTTP响应报文
HTTP/1.1 200 ok 状态行
Content-Type: text/html;charset=UTF-8 响应头
Content-Length: 160
Date: Thu, 24 Feb 2022 00:58:40 GMT
Keep-Alive: timeout=20
Connection: keep-alive
空白行
<!doctype html> 响应体
<html>
<head>
<title>from get servlet</title>
</head>
<body>
<h1>from get servlet</h1>
</body>
</html>
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)