浏览器网络请求——HTTP详解

news2024/11/19 6:14:02

文章目录

  • HTTP 是什么
  • HTTP 发展历程
    • HTTP 1.0
    • HTTP 1.1
    • HTTP 2.0
  • 常用方法
  • 头部信息 (Headers)
    • 请求头(request Headers
    • 响应头(response Headers)
  • 状态码
  • HTTP无状态理解:cookie与session
  • 总结


HTTP 是什么

HTTP(Hyper Text Transfer Protocol): 超文本传输协议,是用层协议,用于从万维网服务器传输超文本到本地浏览器的传送协议。

HTTP 发展历程

截至目前,http 经历了原始版本、http1.0、 http1.1、 http2.0 几个版本,新版本每次出现都针对上一个版本的不足进行加强

HTTP 1.0

1.0 版本有个很大的缺点:TCP连接不可复用,每进行一次 HTTP 通信,都需要进行一次TCP 连接、HTTP 通信、断开 TCP 连接流程,如下图,两次 HTTP 通信就要进行两个完整的流程

在这里插入图片描述

HTTP 1.1

为了解决1.0版本的TCP连接不可复用问题,在1.1版本中,提出了 长连接机制, 在一个 TCP 连接里可以进行多次 HTTP 通信,如下图。

在这里插入图片描述

但是1.1 版本和 1.0 都有个很大的问题:队头阻塞,由于服务的响应是串行的,前一个请求若未响应,会阻塞后一个响应的返回

HTTP 2.0

HTTP2.0 对性能做出了极大的改进主要包括:二进制分帧、头部压缩、服务端推送、多路复用

  • 二进制分帧

在 HTTP1.x 中,数据以文本的格式进行传输,解析起来比较低效。HTTP2.0 在传输消息时,首先会将消息划分为更小的消息和帧,然后再对其采取二进制格式的编码,确保高效的解析。

  • 头部压缩

HTTP2.0 中,客户端和服务器分别会维护一份相同的静态字典,这个字典用来存储常见的头部名称,以及常见的头部名称和值的组合。同时还会维护一份相同的动态字典,这个字典可以实时被更新。第一次相互通信过后,后面的请求只需要发送与前面请求之间头部不同的地方,其它的头部信息都可以从字典中获取。大大节省了网络开销。

  • 服务端推送

在 HTTP1.x 中,如果用户请求了资源 A,结果发现自己如果要用资源 A,那么必须依赖资源 B,这时他不得不再消耗一个请求。而 HTTP2.0 中,允许服务器主动向客户端 push 资源。也就是说当服务器发现客户端请求了资源 A,却忘了请求资源 A 依赖的资源 B 时,它可以主动将资源 B 顺手推送给客户端。

  • 多路复用

在 HTTP 2.0 中,一次连接建立后,只要这个连接还在,那么客户端就可以在一个链接中批量发起多个请求。同时,请求与请求间属于并行,不会互相阻塞。由此,彻底规避了队头阻塞问题。

常用方法

HTTP 协议常用的请求方法有 GET、POST、PUT、DELETE

  • GET :仅用作数据的读取,请求参数以query的形式拼接到url
  • POST :创建新资源或修改现有资源,请求参数以body的形式传递
  • PUT :PUT 在能力上和 POST 类似,区别在于 PUT 的 URI 指向是具体的某个资源,而不能指向资源集合。
  • DELETE:用于删除指定的资源

头部信息 (Headers)

http 在发出请求或者响应时,都会携带有header,其中存放了一些必要的信息,下面列举常用的头部信息。缓存相关的头将在后续文章介绍。

请求头(request Headers

  • Accept: 浏览器可接受的数据格式
  • Accept-encoding: 浏览器可接受的压缩算法,如gzip(服务器压缩,客户端解压,让传输的资源变小,速度更快)
  • Accept-Language: 浏览器可接收的语言,如zh-CN
  • Connect:keep-alive 一次TCP连接重复使用
  • Cookie同域每次请求资源都会把cookie带上
  • Host请求的域名
  • User-agent:简称UA,浏览器信息,标识是什么浏览器,是什么系统,供给服务器分析
  • Content-type:发送数据的格式(多存在于post请求中),如一般json数据为application/json ,图片或文件为multipart/form-data

响应头(response Headers)

  • Content-type:返回数据的格式,如application/json(json),text/html(html),text/css(css)、text/javascript(javascript)image/png

  • Content-length:返回数据的大小,多少字节

  • Content-Encoding返回数据的压缩算法,如gzip

  • Set-Cookie服务端需要通过该字段来修改浏览器中的cookie

状态码

1xx:成功接收了请求,但是处理过程还没结束,需要客户端再抛出一个请求才能完成整个过程。

2xx:表示成功接收请求、并且已经处理完毕。

  • 200 OK,标识客户端的请求已经被服务器正确处理

3xx:表示服务器虽然也处理了你的请求,但客户端还需要进一步的工作,才可以完成请求。

  • 301:永久性重定向,表示资源已被分配了新的 URL

  • 302:临时性重定向,表示资源临时被分配了新的 URL

  • 304,表示服务器校验后发现资源没有改变,提醒客户端直接走缓存来取资源

4xx:客户端错误,意味着请求出错了。

  • 400:请求报文存在语法错误

  • 403:对请求资源的访问被服务器拒绝(多半是没权限)

  • 404,资源不存在,可能是你的路径不对,也可能是这个资源在服务端已经被下掉了

5xx:服务器错误,意味着服务器内部的程序处理有问题。

  • 500:服务器在接受请求后进行处理的过程中,发生了内部错误

  • 502:网关错误

  • 504:网关超时

HTTP无状态理解:cookie与session

HTTP无状态协议,是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,简单的说:前一刻发出的 A 请求,与下一刻发出的 B 请求, B 是完全感知不到 A 请求过的,两个请求间毫无关系。

如果想维持状态信息,需要使用cookiesession

  • cooike

客户端第一次向服务器端发送请求时是没有cookie的,请求后服务器端会在cookie中存入一些数据。下次在访问相同的服务器就会带上cookie中的数据。

  • session

实际上是一个对象,存储在服务器端的内存中,在session对象中也可以存储多条数据,每一条数据都有一个sessionid作为唯一标识。

  • 以登录逻辑为例

1、 客户输入账号密码进行登录,服务器端进行验证,验证成功则生成sessionId,并且在session对象中存储当前用户信息。

2、 服务器端将sessionId写入客户端cookie中,当客户端下次访问服务器端时cookie会被自动发送给服务器端。

3、 服务器端在 cookie 中拿到 sessionId 然后在服务器端的 session 对象中查找 sessionId 进行验证,验证成功说明用户是登陆状态,则可以为其响应只有在登陆状态才能响应的数据。

总结

  • HTTP 是什么

  • HTTP 发展历程

  • 常用方法

  • 头部信息 (Headers)

  • 状态码

  • HTTP无状态理解:cookie与session

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

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

相关文章

【Linux】2.4 第一个小程序——进度条(C语言)

文章目录 character缓冲区的问题:ps. sleep 函数 倒计时进度条1.打印进度条2.让进度条“动起来”3.预留进度条的位置并用提示符显示进度条的状态4.颜色打印只用颜色来表示进度条 character 回车 与 换行 键盘上的 Enter 键: 换行的过程: …

程序员如何成为一名独立开发者?

这里有一个最简单粗暴的方式让你确定你是否能成为一个独立的开发者。 Lv.1 顺畅地完成一个独立外包项目 一个最低成本的试错方式就是去独立地完成一个外包项目,一般来说外包项目的难度较低,但也具有作为开发者必备的大多数流程,如果不确定自…

ChatGPT+小红书爆文,牛!

随着AI技术的不断发展,它已经逐渐渗透到了我们的生活之中,包括内容营销领域。 我们通过AI算法生成文本、优化搜索引擎排名、提高用户体验等,现在AI已逐渐在改变时代的进步,AI也将成为下一个十年的一个变革。我们每个创业者、内容…

Go的开发工具

Go的开发工具 1.VSCode 开源地址: GitHub - microsoft/vscode: Visual Studio Code 官网:https://code.visualstudio.com 好处是免费的,插件多!!! 2.GoLand 收费,是和IDEA是类似的,非常强。…

零基础转行从事云计算运维工作,不得不掌握的几项技能

转行云计算运维已成为今年热门话题之一,面对内卷严重的Java领域,虽然高薪有前景,但是很多人都是望而止步,自己的实力不允许自己卷入这场“高薪职业争夺战”。于是新的IT热门转行职业云计算被重点关注,它会不会成为下一…

如何使用SCQA模型提高表达能力

SCQA架构是“结构化表达”工具。 一、什么是“SCQA架构”?‍ S(Situation)情景——由熟悉的情境或事实引入 C(Complication)冲突——指出实际面临的困境或冲突 Q(Question)疑问——你如何分析…

【开发日志】2023.05 NormalMap Back To Sphere

【开发日志】2023.03.04 ZENO----SimpleGeometry----CreateSphere_EndlessDaydream的博客-CSDN博客CreateSpherehttps://blog.csdn.net/Angelloveyatou/article/details/129178914(4条消息) 【开发日志】2023.04 ZENO----Composite----CompNormalMap_EndlessDaydream的博客-CSD…

Linux-CentOS7安装Oracle11g 11.2.0.1.0

CentOS7安装Oracle11g 下载yum包更新RPM包解压安装包至tmp目录关闭selinux关闭防火墙创建Oracle用户修改内核配置文件创建安装目录和设置文件权限设置环境变量编辑静默安装响应文件安装打开一个新终端使用root用户登录启动监听建立数据库进程查询查看监听状态sqlplus登录设置开…

pgzero所有知识点详解

目录 什么是pgzero? pgzero的安装 4,正式开始! 1,调整背景色 2,导入角色 3,鼠标事件 5,按键事件 6,刷新功能 1,角色属性 2,功能介绍 7,…

Java面试 异常

文章目录 1. Java 异常类层次结构概览图2. Exception 和 Error 有什么区别?3. Checked Exception 和 Unchecked Exception 有什么区别?4. Throwable 类常用方法有哪些?5. try-catch-finally 如何使用?6. finally 中的代码一定会执…

chatGPT VS 科大讯飞星火大模型 使用初体验,到底谁更胜一筹?

下午这会有时间,正好之前申请了讯飞星火大模型的体验,这里就想着简单使用体验对比一下chatGPT和星火大模型的差异,废话不多说这里直接上图: 【诺特兰德叶黄素与纯天然蔬菜中的叶黄素有什么区别】 【今年六月份我就要参加高考了&am…

Python实战案例03

文章目录 1、归并排序2、角谷猜想3、兔子数列4、学生管理系统5、饮品自动售货机6、信息安全策略——文件备份7、用户账户管理1、归并排序 先将待排序的序列划分成若干长度为 1 的子序列,依次将两个子序列排序后合并成长度为 2 的子序列;再依次将两个子序列排序后合并成长度为…

基于Yolov8的道路缺陷检测,加入PConv、WIOU 、DCNV2提升检测精度

1.数据集介绍 缺陷类型:crack 数据集数量:195张 1.1数据增强,扩充数据集 通过medianBlur、GaussianBlur、Blur3倍扩充得到780张图片 按照train、val、test进行8:1:1进行划分 1.1.1 通过split_train_val.py得到trainval.txt、val.txt、test.txt # coding:utf-8import…

事件轮询EventLoop

JS 是一门单线程语言 (换句话说: 一个时间内我只能做一件事), 异步操作都是放到事件循环队列中, 等待主执行栈来执行 JS 是如何执行的 (执行顺序) ●从上往下, 一行一行执行 ●如果中间的某一行书写有误, 那么程序在运行到这一行会报错并停止向下继续运行 ●先把所有的同步代码…

15个对Web开发人员有用工具网站

1. 代码转图片 网址:https://carbon.now.sh/ 使用 Carbon 创建和分享源代码的精美图像。它提供了多种代码风格和主题。 3.图片图库 网址:https://unsplash.com/ 4. 智能 WebP、PNG 和 JPEG 图片压缩 网址:https://tinypng.com/ tiny…

SpringCloud00

服务调用方式 RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有 。自定义数据格式&am…

VSAN 7 安装部署指南(一)

本文使用三台服务器安装ESXI 7.0 ,并在其中一台ESXI中安装vCenter 7.0。本环境中最终在VMware Workstation虚拟机中做的嵌套虚拟化。每台虚拟机配置两块网卡,一块网卡桥接,一块NAT。三块硬盘,一块100GB作为系统盘,一块…

C++前序遍历(栈)

#include <stdio.h> #include <malloc.h> //树结构 typedef struct kl { int data; struct kl *lchild; struct kl *rchild; }bittree; //栈结构 typedef struct ji { int top; bittree **data; int size; }stack; //初始化栈 void in…

【PCIE体系结构十】链路两端的参考时钟有频偏怎么办?

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;《PCI.EXPRESS系统体系结构标准教材 Mindshare》 PCIE规范中…

Linux环境基础开发工具

目录 Linux软件包管理器yum Linux开发工具 文本编辑器vi、vim vim的基本概念 vim操作 Linux编译器-gcc\g使用 函数库分为动态库和静态库 Linux调试器gdb使用 在gdb模式下的命令 Linux软件包管理器yum yum怎么说呢&#xff1f;就相当我们手机里的应用商店。我们需要安…