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请求头字段及其含义:

  1. User-Agent:标识客户端浏览器、操作系统及版本号等信息。

  1. Accept:表示客户端可以接受的数据类型。例如:"text/html"、"application/xml"等。

  1. Accept-Encoding:表示客户端可以接受的数据压缩格式。例如:"gzip"、"deflate"、"br"等。

  1. Accept-Language:表示客户端可以接受的语言类型。例如:"en-US"、"zh-CN"等。

  1. Cache-Control:控制缓存的行为。例如:"no-cache"、"max-age=3600"等。

  1. Connection:表示客户端与服务器之间连接的类型。例如:"keep-alive"、"close"等。

  1. Host:表示请求的服务器的域名或IP地址和端口号。

  1. Referer:表示请求来源的URL地址。

  1. Cookie:表示客户端发送给服务器的Cookie信息。

  1. Authorization:表示客户端发送的身份验证凭证信息。

  1. Content-Length:表示请求体的长度。

  1. 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>
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐