当前位置: 首页 > news >正文

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

Host

表示服务器主机的地址和端口号image.png|449
URL 里面不是已经有 Host 了吗,为什么还要写一次?

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

Content-Length/Content-Type

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

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

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

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

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

  1. application / json

    • body 就是 json
  2. application/x-www-form-urlencoded

    • 称为 form 表单
    • 通过 HTML 中的 form 标签构造出来的一种格式。这个格式的特点,认为是把 query string 放到 body 中了
  3. 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)

image.png

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

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

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

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

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

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

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

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


响应式布局

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

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Paper 0 | Visual Instruction Tuning
  • sqli-lab靶场学习(四)——Less11-14(post方法)
  • Centos7 配置yum源详解
  • express的Router,配置 post 请求方法
  • linux-网络管理-网络配置
  • QEMU:模拟 ARM 大端字节序运行环境
  • 性能测试工具——JMeter
  • expressjs 和 Router 配置 POST 请求
  • Mac使用Nginx设置代理,并禁用自带Apache
  • mac安装JetBtains全家桶新版本时报错:Cannot start the IDE
  • 关于 ModuleNotFoundError: No module named ‘Crypto‘
  • AngularJS 模块
  • 数字IC设计\FPGA 职位经典笔试面试整理--基础篇1
  • C#基础(14)冒泡排序
  • 【架构设计】多级缓存:应用案例与问题解决策略
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • GraphQL学习过程应该是这样的
  • interface和setter,getter
  • Javascript设计模式学习之Observer(观察者)模式
  • PHP的类修饰符与访问修饰符
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊flink的BlobWriter
  • 思维导图—你不知道的JavaScript中卷
  • 微服务框架lagom
  • 移动端唤起键盘时取消position:fixed定位
  • 国内开源镜像站点
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ###项目技术发展史
  • (1)Jupyter Notebook 下载及安装
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (八)Flask之app.route装饰器函数的参数
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (蓝桥杯每日一题)love
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转载)从 Java 代码到 Java 堆
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .net core + vue 搭建前后端分离的框架
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Remoting学习笔记(三)信道
  • .net 获取url的方法
  • .net6 webapi log4net完整配置使用流程
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .Net各种迷惑命名解释
  • .net生成的类,跨工程调用显示注释
  • .net专家(张羿专栏)
  • .py文件应该怎样打开?
  • @PreAuthorize与@Secured注解的区别是什么?
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具