JavaEE: 深入解析HTTP协议的奥秘(3)

文章目录

  • HTTP
    • 认识 "报头"(Header)
    • 认识 "状态码"(status code)


HTTP

JavaEE: 深入解析HTTP协议的奥秘(2)

书接上文~


认识 “报头”(Header)

Header 的整体的格式是"键值对"结构.

每个键值对占一行,键和值之间使用分号分隔.

  • Host 表示服务器主机的地址和端口.

  • Content-Length 表示 Body 中的长度.单位是字节.

    Content-Length 告诉我们,这一个 HTTP 数据报到哪里就结束了.
    HTTP 基于 TCP,TCP 是面向字节流的,存在粘包问题.
    如何解决粘包问题:
    1. 指定分隔符. 如果一个 HTTP 数据报没有 Body ,此时空行就相当于分隔符了.
    2. 指定数据报长度. 如果一个 HTTP 数据报有 Body ,此时 Content-Length 就描述了 Body 的长度.

  • Content-Type 表示请求的 Body 中的数据格式.浏览器会根据这个格式来决定如何解析数据.

    Content-Type 和 Content-Length都属于是在 请求 和 响应 中都会存在的.
    Content-Type 的详细情况

  • User-Agent (简称 UA) 表示浏览器/操作系统的属性.
    在这里插入图片描述
    在以前 UA 的意义更大.
    当年的上网设备,进化速度非常快,同一时刻,会有很多种不同的设备都在被各种用户使用.

    这对网站的开发人员,带来了一定挑战.

    如果网站只支持文字图片,在用好设备的人的眼里,就太 low 了.
    如果网站能够支持复杂多媒体,在用不好的设备的人眼里,压根就无法正确显示.

    解决方案: 同时开发出多个不同版本的页面(有的只有文字图片,有的包含复杂多媒体),判断 UA 字段,通过 UA 获取到用户的浏览器信息和操作系统信息,这样就可以判定当前用户的浏览器版本都支持哪些特性,从而展示对应的页面.

    在今天,虽然浏览器大家都差不多,但是上网的设备还是存在差别(PC / 手机 , 屏幕尺寸(比例)是截然不同的).
    为了解决上述问题,我们仍然可以通过 UA 来切入.但是这个方案不是特别理想,你想象一下,除了PC和手机外,还有平板~

    平板的 UA 看起来和手机一样,而且使用平板的时候,不同的人的使用习惯不同.有的人是横屏使用,有的人是竖屏使用~

    针对上述问题,在前端开发圈子里,研究出了个东西"响应式编程",在前端代码中(主要是 CSS ),能够自动查询出当前屏幕的尺寸,并结合尺寸对页面自动进行重新排版.

    UA 现在还有一个作用,就是用来做数据统计.
    比如说一天有多少广告被展示,多少被点击,哪些广告点击率高~
    根据统计结果,进一步的迭代改进产品.
    UA 的统计主要是用来区分 PC 和移动端的,有多少人通过 PC 访问,又有多少人通过移动端访问.

    User-Agent 的故事

  • Referer 表示这个页面是从哪个页面跳转过来的.

  • Cookie
    在这里插入图片描述
    Cookie 也是键值对结构,使用 ; 来分隔键值对,使用 = 来分隔键和值.

    键值对的含义都是程序员自定义的.

    Cookie 是浏览器本地持久化存储数据的一种机制,按照键值对方式存储,键值对的内容都是程序员自定义的,按照域名为维度分别进行存储(每个网站有自己的 Cookie, 但相互不影响)
    在这里插入图片描述
    为了安全,浏览器禁止网页直接访问你的硬盘.(文件系统)
    万一你打开某个网站,结果你电脑上所有的文件都被删除了…

    虽然不能直浏览器禁止网页接访问硬盘,但是浏览器允许通过键值对的方式来存储数据(这样的数据本质上也是在硬盘上),具体这样的键值对是如何存储到硬盘上的,浏览器封装好,网页本身无法干预.
    这样的一个机制,就是 Cookie.

    Cookie 里面的内容也是来自于服务器,首次访问某个网站,可能是不带 Cookie 的,在响应中就会有 Set-Cookie 这样的 Header, 把一些键值对写回到浏览器这边.浏览器后续访问这个网站就会带有 Cookie ~

    有一个 Cookie 非常经典的使用场景 — 使用 Cookie 保存用户的身份信息.

    对于 HTTP 来说,针对同一个服务器,每一次的 HTTP 请求彼此之间都是独立的.

    登录前是一个请求,后续的请求是如何知道我处于登录状态呢?
    在这里插入图片描述
    更简洁一点的图:在这里插入图片描述

认识 “状态码”(status code)

状态码表示访问一个页面的结果.(是访问成功,还是失败,还是其他的一些情况…)

以下为常见的状态码:

  • 200 表示访问成功.
  • 404 Not Found 没有找到资源.
  • 403 Forbidden 表示访问被拒绝.
  • 405 Method Not Allowed
  • 500 Internal Server Error 服务器出现内部错误.
  • 504 Gateway Timeout
    当服务器载荷比较大的时候,服务器处理单挑请求的时候消耗的时间就会很长,就可能会导致出现超时的情况.
  • 302 Move temporarily 临时重定向.
    访问 A 网站,自动跳转到 B 网站.

    举个例子: 我要换手机号码 A -> B.
    我的朋友同学都是存了 A ,不知道 B.
    只需要我办理呼叫转移,那么有人给 A 打电话就会自动转接到 B 上~

小知识:

  • 1xx:信息状态码,接受到请求正在处理
  • 2xx:成功状态码,请求正常处理完毕
  • 3xx:重定向状态码,需要进行附加操作来完成请求
  • 4xx:客户端错误状态码,服务器无法处理请求
  • 5xx:服务器错误状态码,服务器处理请求出错

本文到这里就结束啦~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557654.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【基础篇】一个键值数据库包含什么?

背景 今天,在构造这个简单的键值数据库时,我们只需要关注整体架构和核心模块。这就相当于医学上在正式解剖人体之前,会先解剖一只小白鼠。我们通过剖析这个最简单的键值数据库,来迅速抓住学习和调优 Redis 的关键。 我们把这个简…

STM32外设应用知识详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

RKMEDIA画面质量调节-QP调节

QP是在视频采集编码过程中的量化参数,其值与画面质量成反比,即QP值越大画面质量越小,其具体调整方法如下: typedef struct rkVENC_RC_PARAM_S {RK_U32 u32ThrdI[RC_TEXTURE_THR_SIZE]; // [0, 255]RK_U32 u32ThrdP[RC_TEXTURE_TH…

如何基于 RLHF 来优化 ChatGPT 类型的大语言模型

🚴前言 对于ChatGPT来说,RLHF是其训练的核心。所谓RLHF,即Reinforcement Learning with Human Feedback,基于人类反馈的强化学习。这项技术通过结合模型自身的生成能力和人类专家的反馈,为改进文本生成质量提供了新的…

解决Android Studio中使用lombok插件错误: 找不到符号的问题

问题 主要是想节省实体类的set、get等方法,使用lombok报错如下: 解决方案 由于Android的限制,在Android中使用lombok兼容极其麻烦,如果你只是想减少set、get等代码可以直接使用kotlin的data class 示例 data class KotlinTes…

等级保护等保资料原件合集(word源资料)

第二章 系统定级与安全域 2.1 系统定级 2.1.1 不同等级的安全保护能力 2.1.2 重要信息系统 2.1.3 定级参考 2.2 安全域定义 2.2.1 安全域定义方法 2.2.2 安全域等级描述 第三章 实施方案设计 3.1 三级等保要求 3.2 基本要求的详细技术要求 3.2.1 物理安全 3.2.2 网…

Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激 Unity 框架搭建学习笔记1-1,前一个1代表凉鞋的第一季教程,后一个1代表该季第一篇我的文章 unity中对象调用的三种方式 方法调用,例如&…

Qt设计登录界面

优化登录框: 将两个按钮连接到槽函数 在构造函数中定义 connect(this->btn1,&QPushButton::clicked,this,&Logon::my_slot);connect(this->btn2,&QPushButton::clicked,this,&Logon::my_cancel); 定义登录按钮连接的槽函数 void Logon::my…

基于Java语言的充电桩平台+云快充协议+充电桩管理后台+充电桩小程序

软件架构 1、提供云快充底层桩直连协议,版本为云快充1.5,对于没有对接过充电桩系统的开发者尤为合适; 2、包含:启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等;…

CMake 属性之目标属性

【写在前面】 CMake 可以通过属性来存储信息。它就像是一个变量,但它被附加到一些其他的实体上,像是一个目录或者是一个目标。例如一个全局的属性可以是一个有用的非缓存的全局变量。 在 CMake 的众多属性中,目标属性 ( Target Properties ) …

NodeJS智慧社区管理微信小程序-计算机毕业设计源码40623

摘 要 随着中国经济的飞速增长,消费者的智能化水平不断提高,许多智能手机和相关的软件正在得到更多的关注和支持。其中,智慧社区管理微信小程序更是深得社区人员的喜爱,它的出现极大地改善了社区人员的生活质量,同时&…

宠物咖啡馆在线体验:SpringBoot框架的创新应用

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

云微客AI直播矩阵,让小白轻松上手的必备直播利器

现在直播带货都已经杀疯了,在新趋势下,AI智能直播应运而生。AI智能直播相较于传统直播,直播模式对于场地的要求和人员的要求都相对较低,大大降低了我们的试错成本,同时直播矩阵系统也为企业和个人带来了低成本、高效率…

浅析基于双碳目标的光储充一体化电站状态评估技术

摘要:全国碳市场拉开了我国能源结构加速转型的大幕,催生了光伏、储能和新能源汽车等一批绿色产业的兴起,同时随着利好政策扶植和消费者的青睐,光伏、储能和新能源汽车市场均加快发展。但传统的充电桩和光伏电站都是分开建设&#…

如何在电脑上创建虚拟网卡

1.右键点击此电脑,选择——管理 2.选择设备管理器——网络适配器,在点击操作选择 添加过时硬件 3.点击 下一页 4.在这里选择网络适配器,点击下一页 5.选择微软的环回适配器 6.打开控制面板 7.点击网络和Internet 8.点击网络和共享中心 9…

一个读取CT图像序列,并进行表面重建的C++代码

这篇文章中,介绍使用VTK进行读取CT图像(一个序列),然后进行表面重建。为什么不使用DCMTK呢?因为使用DCMTK需要一张一张读取,要自己写一个代码,还要创建一个容器来放读入的CT数据,比较…

亳州自闭症寄宿制学校,关注孩子的学习和生活

在特殊教育领域,自闭症儿童的教育与成长一直是社会各界关注的焦点。近年来,随着对自闭症认识的加深,越来越多的寄宿制学校应运而生,致力于为这些特殊的孩子提供全面、个性化的教育服务。在安徽亳州,这样的学校正努力为…

Metasploit渗透测试之后渗透

简介 Metasploit拥有300多个后渗透模块,是渗透测试的最佳框架之一,覆盖了从信息收集到后渗透甚至报告的每个阶段。本章将重点介绍提权、持久化、获取凭证和横向移动等内容。 # 1、后渗透模块 在Metasploit框架升级后,用于自动化后渗透任务…

C++——类和对象(二)

1. 类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。⼀个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不…

某国有资本运营中心人才选拔项目纪实

某国有资本运营中心人才选拔项目纪实 【客户行业】 政府与事业单位 【问题类型】 人才招聘选拔 【客户背景】 在三年国企改革过程中,南方某省政府为响应国家政策,提出组建专业化国有资本投资运营公司,大力开展专业化资本运营,…