【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

简介: 【HTTP】请求“报头”(Host、Content-Length/Content-Type、User-Agent(简称 UA))

Host

表示服务器主机的地址和端口号

URL 里面不是已经有 Host 了吗,为什么还要写一次?

  • 这里的 Host 和 URL 中的 IP 地址、端口什么的,绝大部分情况下是一样的,少数情况下可能不同
  • 当前我们经过某个代理进行转发。过程中,URL 中的 IP 指向的是代理服务器的 IP;Host 中的 IP 指向的是最终目标的地址

Content-Length/Content-Type

这俩都和 body 密切相关,如果你这个数据包没有 body,也就不会有这两个字段

  • Content-Length 表示 body 中的数据长度
  • Content-Type 表示 body 中的数据格式

通过这个长度,来处理“粘包问题”。HTTP 底层也是基于 TCP。连续传输多个 HTTP 数据报,此时接收方这边的接收缓冲区里面就会积累多个包的数据,应用程序在读取这些数据的时候就需要明确包之间的边界

  • 如果是没有 body 的请求/响应,直接使用空行作为分隔符
  • 如果有 body,空行就不是结束标记了,从空行开始来读取 body,body 要读多长就取决于 Content-Length。读完之后,这个包就结束了

body 里面可以传输很多种格式,程序员也可以自己约定任意的格式,但是有些格式是非常常见的:

请求中:

  1. application/json
  • body 就是 json
  1. application/x-www-form-urlencoded
  • 称为 form 表单
  • 通过 HTML 中的 form 标签构造出来的一种格式。这个格式的特点,认为是把 query string 放到 body 中了
  1. multipart/form-data
  • 上传文件时使用的
  • 第二种格式也是可以的

响应中:

  1. text / plain,纯文本
  2. text / html,html
  3. text / csss,css
  4. application / javascript,js
  5. application / json
  6. image / png
  7. image / jpg

[!quote] 抓的包是灰色的

  • 由于浏览器和服务器之间要进行多次网络交互,整体的过程是比较低效的
  • 为了提升效率,就会把一些固定不变的内容在浏览器本地的机器硬盘上进行缓存(css、图片、js 很少发生改变)
  • 保存到硬盘上之后,后续再请求,就可以直接从硬盘上读取数据,减少了网络交互的开销
  • 抓到硬盘上的数据,就是灰色的

使用 Ctrl+f,强制刷新,就可以不读取缓存,直接读取服务器数据

User-Agent(简称 UA)

  • 32 位系统支持的最大内存为 4GB
  • 这块部分主要就是操作系统的信息和浏览器的信息。描述了用户在使用什么样的设备在上网

上古时期,UA 是非常关键的部分,不同用户使用的上网的设备差异很大(当年计算机发展日新月异),在同一个时间段内,新的和旧的会同时存在

  1. 最老的浏览器,只能显示文本
  2. 之后能显示图片
  3. 能支持 js
  4. 支持 flash 等动画效果
  5. …

如果你是一个程序员,你要写一个网站,你写的网站是否要使用新的特性呢?

  • 使用新特性,佬的设备就无法正常打开
  • 不使用新特性,你这个网站就打不过竞争对手
    我们就可以借助 UA 来解决上述问题。UA 里面记录了系统和浏览器的信息,服务器就可以针对此时的 UA 信息进行判定
  • 如果用户用的是很老的设备,返回的页面就不包含新的特性,确保这个页面能正常访问
  • 如果用户用的是新的设备,返回的页面就包含新特性,确保这个页面体验足够好

随着时间推移,浏览器现在都差不多了,UA 好像无用武之地了?

  • 其实仍然很有用
    现在的市面上上网的设备存在这两类:
PC 屏幕大 更宽
手机 屏幕小 更窄
对应的返回的页面布局就应该有差异。UA 里面包含了系统信息,就可以判定系统是 PC 的还是移动端的,此时就可以根据这个信息来返回不同的页面了

使用手机浏览器的时候,很多手机浏览器都有一个功能——“手动修改 UA”,手动把 UA 改成 PC 端的 UA,这样就能访问电脑端的网页了


响应式布局

给 PC 端维护一套代码,给移动端维护一套代码,搞两套代码有点麻烦,并且手机尺寸区别也很大,还有平板什么的。前端后来提出了解决上述问题的技术方案——“响应式布局”

通过一套代码,适应不同尺寸的显示器。CSS3 提供了一套特性——“媒体查询”,可以感知到当前屏幕的尺寸,根据不同的尺寸,应用不同的样式

所以现在也有越来越多的网站,不再依赖 UA 来进行区分了

User-Agent 的故事: https://zhuanlan.zhihu.com/p/398807396


相关文章
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
1204 130
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
961 2
|
JSON JavaScript API
Python模拟HTTP请求实现APP自动签到
Python模拟HTTP请求实现APP自动签到
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1284 0
|
Web App开发 前端开发
|
Web App开发 Apache
|
Web App开发 前端开发 算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
基于大数据的精准营销与应用场景 2015年08月11日 大数据 大数据营销时代来临营销学领域过去半个多世纪的发展让我们见证了从“以产品为中心”到“以客户为中心”的转变。
1184 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
1142 0
|
Web App开发 前端开发 Java

热门文章

最新文章