这里是Themberfue
上篇文章介绍了HTTP报头的首行信息
本篇我们将更进一步讲解HTTP报头键值对的含义~~~
❤️❤️❤️❤️
报头Header
✨再上一篇的学习中,我们了解了HTTP的报头主要是通过键值对的结构存储和表达信息的;我们已经了解了首行的HTTP方法和URL;那么我们继续深入一些其他的键值对含义吧
Host
- ✨host在英文中有 "主人" "主机" 的意思,所以在HTTP协议中,host的值所存储的就是目标服务器的主机名或IP地址以及可选的端口号。例如:www.bilibili.com[:8086]
- 它是HTTP/1.1中强制要求的字段,每个HTTP/1.1请求必须包含Host字段,否则服务器会返回400 Bad Request。
- host的值的内容URL的主题内容大差不差,不过,在传输URL时是不会对URL加密的,被加密的一般是Header和Body的内容,所以服务器在收到请求后,也可以做一个检验,检验host的内容和URL的内容是否发生改变。
作用
1. 支持虚拟主机(Virtual Hosting):
- 多个网站可以托管在同一台服务器上,使用相同的IP地址。
- Host字段的值指定客户端希望访问的具体网站。例如:
请求A GET /index.html HTTP/1.1 Host: www.example1.com 请求B GET /index.html HTTP/1.1 Host: www.example2.com
- 服务器通过Host字段区分请求,返回对应的网站内容。
2. 支持非标准端口:
- Host字段可以指定端口号,使服务器知道客户端访问的具体服务。例如:
GET /api/data HTTP/1.1 Host: www.example.com:8080
- 这里的:8080明确了目标服务运行在8080端口,而不是默认的80端口。
3. 增强请求路由能力:
- 在负载均衡或反向代理场景中,Host字段帮助服务器路由请求到对应的后端服务器。
Content-Length
- ✨中文直接翻译过来就是:内容长度,Content-Length指代的就是HTTP协议中body正文的内容长度,单位是字节。
- 我们知道,通过HTTP构造的数据包只是在应用层上的,我们还需经过传输层、网络层.....,通过Content-Length,传输层就可以直到这个HTTP数据包的正文内容有多少,读到哪里,知道消息体的预期长度。
- 若是没有Content-Length,这说明这个请求或者响应就没有body正文,一般读到空行就表示该数据包读完了,若有Content-Length,就按照Content-Length所给定的值来读取body正文的内容。
- 前面编写TCP代码时,我们使用 hasNext() 方法,也就是在暗指读到空行就结束读取。
作用
1. 消息完整性校验:
- 客户端或服务器通过Content-Length字段知道消息体的预期长度。
- 如果接收到的数据长度与Content-Length字段的值不符,则认为数据可能丢失或损坏。
2. 分块数据解析:
- 在持久连接中,服务器需要知道消息体的确切长度,以便从流中提取完整的消息。
3. 提高通信效率:
- 通过提前知道消息体长度,可以优化内存分配和处理逻辑。
Content-Type
- ✨在当今的互联网时代,网络上的数据非常之多,数据类型也非常之多:纯文本、超文本、富文本、图片、视频......
- 所以,在传输数据时,也需要知道该数据是哪个类型的;那么,Content-Type就充当此角色,Content-Type表示请求的body的数据格式,也提示了接受方如何解析body中的数据。
- Content-Type用于指示消息体中数据的媒体类型(MIME类型);它告诉接收方(浏览器或服务器),如何解析和处理消息体的数据内容。
- Content-Type负责标明数据的类型和格式;它在请求和响应中都有广泛的应用,确保了数据的正确传输和解析。
携带的数据类型
✨HTTP可携带的数据类型还是比较全面、比较多的,例如:
- HTML:text/html => 浏览器便会解析其中的标签,把标签转换为界面显示
- CSS:text/css => 浏览器便会解析其中的选择器以及属性,将这些样式应用到指定的内容上
- JS:application/javascript => 浏览器便会通过JS引擎执行这些JS代码的逻辑
- JSON:application/json => 浏览器通常不会做处理,由程序员来对这些JSON数据进行操作
- 图片:image/png、image/jpg => 浏览器按照图片的二进制格式,解析出来并显示在页面上
- 文本类型(text):用于传输纯文本数据。
Content-Type: text/plain; charset=UTF-8 Content-Type: text/html; charset=UTF-8
图片类型(image):用于传输图片数据。
Content-Type: image/jpeg Content-Type: i