3.2 http协议

news2024/11/14 20:11:09

一.HTTP协议

1.概述

是计算机网络的核心概念,是一种网络协议

网络协议种类非常多,其中IP,TCP,UDP...其中还有一个应用非常广泛的协议.HTTP

HTTP协议是日常开发中用的最多的协议

HTTP处在TCP/IP五层协议栈的应用层

HTTP在传输层是基于TCP的,(http/1 HTTP/2是基于TCP,最新版本的HTTP/3是基于UDP)

传输层协议:主要关注的是端对端之间的数据传输,TCP重点关注的是可靠传输.

应用层协议:则是站在程序应用的角度,要对传输的数据,来进行具体的使用.大多数情况,是程序员自定制的,根据实际的需求场景,来设计协议.

http协议是设计好的,自身可扩展性非常强,可以根据实际需要,让程序员传输各种自定义的数据信息

HTTP具体的应用场景.

只要随便打开浏览器或者打开了一个手机app,随便加载一些数据,基本用到了http

2.协议格式

协议格式:数据具体是怎么样组织的

UDP: 报头(源端口+目的端口+长度+检验) + 载荷

UDP/TCP/IP这些协议都属于"二进制"的协议,经常要理解到二进制的bit位

HTTP则是一个文本格式的协议

文本格式相对于二进制更方便人的肉眼观察

如何看到HTTP的报文格式?

借助一些"抓包工具"来获取具体的HTTP交互过程,请求和响应

比如TCP/UDP这些,也是可以借助抓包工具来进行分析

抓包工具:第三方的程序,在这个网络通信的过程中,类似于传话的人,获取传话的信息(代理)

请求和响应都是要路过代理的

这个时候在代理上,就很容易获取到请求和响应的详细内容

因此,抓包工具就是一个代理,抓包工具就能很容易获取到传输过程中的网络上的详细数据

二.Fiddler

Fidder是一个专门去抓HTTP的抓包工具

wireshark是抓TCP/UDP/IP

Fiddler左侧,是一个列表,显示了当前抓到的所有的HTTP/HTTPS的数据报

HTTPS是在HTTP基础上,引入了加密机制

1

选择Raw就是看到的是http请求数据的本体,选择其他的选项,相当于Fiddler对数据进行了一些加工

调整了格式

这就是HTTP请求的原始模样,

如果往TCP socket中,按照上述格式来构造数据,并写入socket,其实本质上就相当于构造了一个http请求

看到的本体是乱码其实看乱码是压缩之后的结果,

服务器最贵的硬件资源其实是网络带宽,像有些http响应经常会很大,就比较占用带宽,为了能够提高效率,经常服务器会返回"压缩之后"的数据,由浏览器收到之后再来解压缩.

1.开启https

Fiddler刚安装好,默认没有启用HTTPS.如果抓到HTTPS的包,就会出现以下情况

2.不要安装其他代理插件

Fiddler是与其他的代理程序是冲突的

3,fidder与wireshark的区别

diddler是专注于HTTP请求的(gpu),wireshark什么请求都能抓(CPU

三.HTTP请求具体内容

http请求分成了四个部分

1.请求行(首行

a)HTTP的方法,描述了这个请求想做什么

b)URL .描述了要访问的网络资源具体在哪里

c)版本号,HTTP/1.1表示当前使用的HTTP版本是1.1,

2.请求头(header)

包含了很多行

每一行都是一个键值对--

建和行之间用 : 空格来区分

这个键值对的个数还有表示的含义是不固定的

3.空行

相当于请求头的结束标志.类似于链表中的null

4.请求正文(body)

不一定有

四. HTTP相应

1.首行

包含了三个部分

a)版本号:HTTP1.1

b)200 状态码,描述了这个响应是什么状态的,要么成功就是200要么就是失败并描述了失败的原因

c) OK 状态码的描述,通过一个简单的单词,来描述当前状态码的含义

2.响应头(header)

也是键值对结构,每个键值对占一行,

3.空行

表示相应头的结束标记

4.响应正文(body)

服务器返回给客户端的具体数据..最常见的格式是html

五.HTTP请求首行详细解释

1.URL----网络唯一资源地址符

明确主机是谁,又明确要主机上的哪个资源

红线所表明的就是query string ---查询字符串

a)协议方案名

描述了这个URL是给哪个协议来使用的

b)登录信息

现在很少会用到,一起会在这里体现用户名密码

c)服务器地址

当前要访问的主机是什么,可以是IP地址或者是域名

d)服务器端口号

要访问主机的哪个应用程序

端口号大部分情况下是省略的

浏览器会自动赋予一个默认值

对于http开头的URL,就会用80端口作为默认值

对于https开头的URL,就会用443端口作为默认值

e)带层次的文件路径

描述了当前要访问的服务器资源是什么

f)查询字符串

本质是浏览器/客户端给服务器传递的自定义消息 比如网购自行车,重量太大 分开发货

对获取的资源提出了进一步的要求,查询字符串的内容也是键值对结构,

查询字符串路径之间用?来分割

上述的IP地址+端口+带层次的文件路径 其实就描述了一个网络上的具体资源

但是在这个基础之上,还可以携带其他的要求,也就是后面的参数

2.URL encode/decode

querystring中如果包含了特殊字符,就需要对特殊字符进行转义

在这个转义的过程中,就叫做url encode

把转义后的内容还原回来 就叫做 url decode

url里面有很多特殊含义的符号

/ : ? & = 在URL中都是具有特定含义的

query string 里也包含这类特殊符号,就可能导致URL被解析失败!

所以我们可以得知

URL encode的规则,其实就是把要转义的内容的ascii码值(二进制值)取出来,用十六进制表示,同时加上% 来区分这是一个字节

3.方法

http协议的方法非常多,但是常用的还是GET和POST

http中引入这些方法,是为了表示不同的语义--也就是是否有特定的含义

3.1面试题 GET和POST区别

首先,GET现在和post没有本质区别,但是细节上还是有的

1)在语义上,

GET通常是用来取数据

Post用来上传数据

2)传递方式

通常情况下,GET没有body,GET通过query string向服务器传递数据

通常情况下,POST是由body,POST通过body向服务器传递数据,

3) 幂等区别

相当于稳定把

GET请求一般是幂等的,每次输入相同的数据,得到的输出结果是确定的

POST请求一般是不幂等的,每次输入相同的数据,得到的结果是不确定的

4)缓存

GET可以被缓存,而POST不能被缓存

能不能被缓存和能不能幂等是有关联的

缓存就是提前把结果记住,如果是幂等的,记住结果的话,就节省了下次访问的开销

六.header

1.Content-length/Content-Type

Content-length:表示body中的数据长度

Content-Type :表示请求的body中的数据格式

这一段就跟URL的query string 一样

登录功能主要用POST实现 因为登录要给服务器传递用户名和密码

如果是GET的话 用户名和密码就会放在URL的query string中传递

此时浏览器的地址栏的路径就会变得很长一串 ,而且密码是明文提交看起来不好

POST数据在body中,用户不能直接看到,body放的是什么的,

数据安不安全,取决于数据是否明文传递,是否加密

application/json

数据位json格式,body格式形如:

最常见请求的body格式就是json

HTTp是基于TCP的协议,TCP是一个面向字节流的协议,粘包问题:分不清哪些数据是一起的.

合理设计应用层协议,来明确包和包之间的边界

1)使用分隔符 2)使用长度

如果当前有若干个GET请求,到了TCP接收缓冲区

应用程序读取请求的时候,就以空行为分隔符

如果有若干个POST请求,到了TCP缓冲区

这歌时候空行后面还有body,当应用程序堵到了空行以后,就需要按照Content-length表明的长度

继续读取若干长度的数据,如果不指定,就不知道到底该读多少

2.User-Agent UA

表示的是 当前用户在拿什么上网

由 操作系统信息+浏览器信息 组成

3.Referer

表示了当前页面是从哪个页面跳转过来

4.cookie

1)概述

浏览器为了安全,默认情况下是不能让页面的js访问到用户电脑上的文件系统

假设在某个网页上有恶意代码.不小心点击就会删除你电脑上的文件系统

但是有的时候需要页面持久化存储一些数据,方便后续访问网站

比如,需要存储用户当前的身份信息

解决方案:当用户在登录页面完成身份认证之后,此时服务器就会给浏览器返回一个用户的身份信息

浏览器就把这个信息保存到了一个特定的位置上,后续再访问到一个网站的其他页面的时候

浏览器再自动的带上这个身份信息,服务器就能识别

而cookle就是浏览器给页面提供的一种能持久化访问存储数据的机制

持久化指的是 数据不会因为程序重启或者主机重启 而丢失,,因为写到了磁盘

2)具体组织形式

1.先按照域名来组织,针对每个域名,分别分配一个小房间,访问搜狗,浏览器就会给Sogou这个域名

记录一组cookie,访问码云,浏览器也会给码云记录一组cookie

2,在每个域名对应的自己的放进里,优惠按照键值对的方式来组织数据

cookie的数据是服务器返回给客户端的

包含了这样一组header,在服务器完成了身份认证之后没就给客户端返回了一些具体的信息

信息就是通过了Set-Cookie这样的响应报头来表示

一些用户在这个域名进行的关键信息,被存储到服务器上,这些信息被称为

"session"会话

cookie最重要的应用场景就是存储会话id.进一步的让访问服务器的后续页面

能够带上这个sessionid从而让服务器知道当前的用户信息

七.HTTP响应

状态码:表示这次请求是成功还是失败,以及失败的原因是什么

1) 200 ok

浏览器顺利获取当前内容

2)404 Not Found

要访问的资源不存在

3) 403 Forbidden

资源有 但是没有权限使用

4)405 Method Not Allowed

例如 尝试用GET访问别人的服务器.但是别人只支持POST就会返回405

5) 500 Internal Server Error

服务器出问题的

6)504 Gateway Timeout

服务器太繁忙了

7) 302 Move temporarily

重定向:一个非常典型的情况

在重定向向应力,一般都需要Location属性的

2:属于成功 200

3开头 都属于重定向 301 302

4开头 都属于客户端出现错误 404 403

5开头 属于服务器出现错误 500 504

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

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

相关文章

交换机电口、光口、网络速率的基本概念总结

电口和光口千兆网 & 万兆网:POE:包转发率:背板带宽/交换容量:)电口和光口 电口: 电口也即RJ45口,插双绞线的端口(网线),一般速率为10M或100M,即为百兆工…

[数据结构]:09-二分查找(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 二分查找实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SearchFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要…

2023年3月北京/上海/广州/深圳DAMA数据管理认证CDGA/CDGP

弘博创新是DAMA中国授权的数据治理人才培养基地,贴合市场需求定制教学体系,采用行业资深名师授课,理论与实践案例相结合,快速全面提升个人/企业数据治理专业知识与实践经验,通过考试还能获得数据专业领域证书。 DAMA认…

【JavaWeb】数据链路层协议——以太网 + 应用层协议——DNS

以太网 以太网不是一个具体的网络,而是一个技术标准,主要应用于数据链路层和物理层。 以太网数据帧结构 以太网的数据帧结构由三部分构成: 帧头 载荷 帧尾 其中的MAC地址是六位,这样就比IPV4所表示的地址大很多,…

Idea git 回滚远程仓库版本

目标 回滚远程仓库到特定版本。 将【添加test03】版本回滚到【行为型模式】版本。 回滚前的效果图 步骤 ①复制需要回滚到的版本的版本号 ②右键项目,选择Git-Repository-Reset Head ③Reset Type选择Hard;To Commit填入步骤①复制的版本号&#xff…

【Flutter·学习实践】运行项目及解决各种报错

文章目录 简介 项目目录介绍 运行报错:Exception: Gradle task assembleDebug failed with exit code 1 简介 我As的版本信息:Android Studio Dolphin | 2021.3.1 Patch 1 上一张搭建好了开发环境我们就开始运行程序检验项目是否存在问题。 项目目…

《分布式技术原理与算法解析》学习笔记Day27

故障隔离 什么是故障隔离? 故障隔离,就是采用一定策略,以实现当某个模块发生故障时,不会影响其他模块继续提供服务,以保证整个系统的可用性,它可以避免分布式系统出现大规模的故障,甚至是瘫痪…

spark history文件占用磁盘过高问题解决

我们目前用的spark版本还是2.x spark的history事件是保存在hdfs上的,通过spark.history.fs.logDirectory指定保存的hdfs目录 使用中发现history日志文件占用磁盘还挺高的 于是写了一个脚本来定期进行清理,只保留一定时间的文件 对于spark离线任务来说…

开学季哪个电容笔好?2023口碑最好电容笔推荐

虽说苹果原装的电容笔非常好用,性能也非常不错,但由于价格昂贵,普通的学生是没办法购买的,再加上重量比较大,使用时间长了,难免会让人感觉到疲劳。如果仅仅是为了学习记笔记,那就没必要再去购买…

ubuntu搭建 自动驾驶单目3d检测smoke 环境

论文:SMOKE:Single-Stage Monocular 3D Object Detection via Keypoint Estimation 论文链接 源码 操作系统:ubuntu18.04 显卡:RTX2080TI 一、搭环境(前面和GitHub上一样,补上我踩的坑) 1.创建虚拟环境 conda create…

PayPal轮询系统解放你的生产力助力起航

现在很多跨境商家手里都有很多PayPal账号,本来多个PayPal账号就是为了防止一个账号出现问题,导致工作没办法继续下去。但是手动切换让很多盯站的商家觉得很麻烦。而且多账号之间本可以相互配合,让彼此的安全系数越来越高,风控越来…

win10 设备管理器中的黄色感叹号(华硕)

目录一、前言二、原因三、方案四、操作一、前言 打开设备管理器,我们可以看到自己设备的信息,但是在重装系统后,你总会在不经意间发现。咦,怎么多了几个感叹号??? 由于我已经解决该问题&#…

数据库事务详解

概述事务就是数据库为了保证数据的原子性,持久性,隔离性,一致性而提供的一套机制, 在同一事务中, 如果有多条sql执行, 事务可以确保执行的可靠性.数据库事务的四大特性一般来说, 事务是必须满足 4 个条件(ACID):原子性(Atomicity&…

vscode ssh一直卡在wget的解决方案

vscode ssh一直卡在wget的解决方案找到commit_id 在服务器下点进该目录 .vscode-server\bin 一般日期最新的那一串就是我们需要的commit_id下载vscode-server-linux-x64.tar https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable 将加粗部分替换…

2023年天津财经大学珠江学院专升本专业课考试题型

天津财经大学珠江学院关于2023年高职升本科专业课考试时间及题型一、专业课考试 (一)时间安排 2023年天津财经大学珠江学院高职升本科专业课考试定于2023年3月25日14:00-17:00进行,凡报考工商管理、旅游管理、税收学专业的考生&am…

智慧监所三维综合管控平台 构建数字智慧监管体系

建设背景监狱肩负着戒治管理、维持监所安全稳定等职责,目前全国有监管场所5500多个,监狱680多个。近年来,司法部不断加大司法行政改革力度,持续推进“数字法治,智慧司法”信息化体系建设战略部署。“智慧监狱”管理应用…

变更数据捕获(CDC)

从广泛意义上说,全球许多企业每天都需要通过频繁的数据批量处理与加载,来定期将数据从一个数据库迁移到另一个数据库(或数据仓库)。这类定期批量加载的工作,往往既耗费时间,又会消耗原始系统的大量处理能力。因此,管理…

design\project\学习 OAuth 读书笔记(二)

OAuth(二) 原文链接:OAuth 2.0 tutorial | OAuth flows 本文假设您已经看过 OAuth(一) 目录OAuth(二)OpenId ConnectOAuth2:令牌自检(Token Introspection)…

Qt std :: bad_alloc

文章目录摘要问题出现原因第一种 请求内存多余系统可提供内存第二种 地址空间过于分散,无法满足大块连续内存的请求第三种 堆管理数据结构损坏稍微总结下没想到还能更新参考关键字: std、 bad、 alloc、 OOM、 异常退出摘要 今天又是被BUG统治的一天&a…

fengMap 自定义dom 偏离实际位置;缩放时飘出地图所在区域

目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.前人写了一份代码,很奇怪。使用 new fengmap.FMCompositeMarker添加的复合覆盖物位置是正常的,缩放的时候也是正常的,仍然处于地图内部;但是new fengmap.FMDomMarker添加…