3.2 http协议
一.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
相关文章:
3.2 http协议
一.HTTP协议1.概述是计算机网络的核心概念,是一种网络协议网络协议种类非常多,其中IP,TCP,UDP...其中还有一个应用非常广泛的协议.HTTPHTTP协议是日常开发中用的最多的协议HTTP处在TCP/IP五层协议栈的应用层HTTP在传输层是基于TCP的,(http/1 HTTP/2是基于TCP,最新版本的HTTP/3是…...
页面访问升级出错怎么解决
相信大家在访问网站的时候时常会遇到页面访问界面升级,暂时不可能进行访问操作,可能遇到这种情况很多小伙伴们都不知道怎么版,其实互联网网页在正常使用过程中是不会出现这种问题的。那么如果遇到页面访问界面升级怎么办?页面访问界面升级通…...
leetcode 181. 超过经理收入的员工
SQL架构 表:Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ---------------------- Id是该表的主键。 该表的…...
任务类风险漏洞挖掘思路
任务类风险定义: 大部分游戏都离不开任务,游戏往往也会借助任务,来引导玩家上手,了解游戏背景,增加游戏玩法,提升游戏趣味性。任务就像线索,将游戏的各个章节,各种玩法,…...
2023年Dubbo常见面试题
2023年Dubbo常见面试题 Dubbo 中 zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么? 可以通信的,启动 dubbo 时,消费者会从 zk 拉取注册的生产者的地址接口等数据,缓存在本地。…...
星光2开发板使用ECR6600U无线wifi网卡的方法
visionfive2 开发板性能还是不错的,有些人买的时候会带一个无线wifi网卡,但是官方提供的操作系统没有驱动。 所以需要自己编驱动(他大爷的)。 还好有人已经踩过坑了。 星光2之USB无线网卡使用教程【新增RTL8832AU WiFi6双频无线…...
【ArcGIS Pro二次开发】(11):面要素的一键拓扑
在工作中,经常需要对要素进行拓扑检查。 在ArcGIS Pro中正常的工作流程是在数据库中【新建要素数据集——新建拓扑——将要素加入拓扑——添加规则——验证】,工作流程不算短,操作起来比较繁琐。 下面以一个例子演示如何在ArcGIS Pro SDK二次…...
【实现点击下载按钮功能 Objective-C语言】
一、实现点击下载按钮功能, 1.接下来,我们再实现另外一个功能,是什么,点击下载按钮吧: 点击下载按钮,是不是要有效果啊, 就是给大家实现这个功能, 首先,我们要实现单击这个效果,是不是要给按钮注册单击事件吧, 请问,这个按钮在哪里啊,是在控制器里面吗,不是,…...
界面控件DevExpress WinForm——轻松构建类Visual Studio UI(三)
DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任…...
项目实战-瑞吉外卖day01(B站)
瑞吉外卖-Day01课程内容软件开发整体介绍瑞吉外卖项目介绍开发环境搭建后台登录功能开发后台退出功能开发1. 软件开发整体介绍作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责&am…...
Linux 学习整理(使用 iftop 查看网络带宽使用情况 《端口显示》)
一、命令简介 iftop 是实时流量监控工具,可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等。 二、命令安装 yum install -y iftop 三、命令相关参数及说明 3.1、相关参数说明 -i:设定监测的网卡&#…...
Vue3创建项目(四)axios封装及接口配置
项目结构: 目录 🍉🍉🍉index.ts 🍉🍉🍉 api.ts 看完需要预计花费10分钟。 请求拦截器与响应拦截器 阅读下面代码需先了解以下内容: 请求拦截器: 请求拦截器的作用是在请求发送前进…...
【算法笔记】递归与回溯
递归与回溯 To Iterate is Human, to Recurse, Divine. —L. Peter Deutsch 人理解迭代,神理解递归。 —L. Peter Deutsch 1.什么是递归呢 递归形象描述: 你打开面前这扇门,看到屋里面还有一扇门。 你走过去,发现手中的钥匙还可以…...
蓝桥杯备赛——Echarts学习
文章目录前言学习 ECharts 的方法快速上手基础知识option 配置选项可选配置title 标题组件tooltip 提示框组件axisPointer 坐标轴指示器legend 图例组件toolbox 工具栏坐标轴xAxis和yAxisseries ([ ]用数组表示,数组里是一个个数据对象)饼状图散点图交互…...
动态规划--最长公共子串
最长公共子串公共子串问题费曼算法动态规划算法思路代码实现公共子串问题 在计算机科学中,最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。链接: 百度百科 费曼算法…...
【运筹优化】剩余空间法求解带顺序约束的二维矩形装箱问题 + Java代码实现
文章目录一、带顺序约束的二维矩形装箱问题二、剩余空间法三、完整代码实现3.1 Instance 实例类3.2 Item 物品类3.3 PlaceItem 已放置物品类3.4 Solution 结果类3.5 RSPackingWithWeight 剩余空间算法类3.6 Run 运行类3.7 测试案例3.8 ReadDataUtil 数据读取类3.9 运行结果展示…...
第四阶段15-关于权限,处理解析JWT时的异常,跨域请求,关于Spring Security的认证流程
处理解析JWT时的异常 由于解析JWT是在过滤器中执行的,而过滤器是整个服务器端中最早接收到所有请求的组件,此时,控制器等其它组件尚未运行,则不可以使用此前的“全局异常处理器”来处理解析JWT时的异常(全局异常处理器…...
毕业设计 基于51单片机的指纹红外密码电子锁
基于51单片机的指纹红外密码电子锁1、项目简介1.1 系统框架1.2 系统功能2、部分电路设计2.1 STC89C52单片机最小系统电路设计2.2 矩阵按键电路电路设计2.3 液晶显示模块电路设计3、部分代码展示3.1 LCD12864显示字符串3.2 串口初始化实物图1、项目简介 选题指导,项…...
【JavaWeb】数据链路层协议——以太网 + 应用层协议——DNS
以太网 以太网不是一个具体的网络,而是一个技术标准,主要应用于数据链路层和物理层。 以太网数据帧结构 以太网的数据帧结构由三部分构成: 帧头 载荷 帧尾 其中的MAC地址是六位,这样就比IPV4所表示的地址大很多,…...
docker 容器安装 python jre
Dockerfile FROM python:2.7.11-alpine RUN mkdir /usr/local/java WORKDIR /usr/local/java # 5.更改 Alpine 的软件源为阿里云,默认从官方源拉取比较慢 RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \ echo…...
Linux下将C++程序打包成动态库静态库方法
之前在这篇文章里介绍过动态库和静态库的理论部分,这篇文章主要介绍下实际的操作步骤: 静态链接库生成 gcc -c main.cpp -o main.o ar -rc libmain.a main.o sudo cp libmain.a /usr/local/lib 调用即可解释一下上面的命令:前两步生成了libmain.a sudo…...
Centos7 服务器基线检查处理汇总
1、服务器超时设置 问题描叙 TMOUT的值大于key2且小于等于{key2}且小于等于key2且小于等于{key1}视为合规 查看命令:export检测结果 超时时间:0处理方式 备份/etc/profile文件 cp /etc/profile /etc/profile_bak编辑profile文件 vim /etc/profile修改/新增 TMO…...
PaddleOCR遇到 lanms-neo问题处理
在window环境中安装PaddleOCR依赖是真的蛋疼,关键官方论坛里也都没有具体的解决方案。吐槽。。。吐槽。。。 我在 “windows安装lanms-neo问题处理”文章中看到lanms-neo问题全过程解决。个人觉得文档说明不是很细致,导致我按步骤执行,还是安…...
coreldraw2023安装包下载及新功能介绍
对于广告标识业来说 coreldraw这个软件,对我们来说绝对不陌生,我从2008年开始接触到广告制作,到现在已经13多年了,从一开始的coreldraw 9红色的热气球开始。就被这个强大的软件所吸引,他有强大的排榜功能已经对位图的处…...
Nginx 负载均衡服务失败场景
nginx可以配置负载均衡,我们可以通过配置实现nginx负载均衡。这里部署了两个服务producter-one和producter-one2。 upstream proxyproducter-one {server producter-one:8080 weight1;server producter-one2:8080 weight1;}# 访问其他服务server {listen 9090…...
开学季哪个电容笔好?2023口碑最好电容笔推荐
虽说苹果原装的电容笔非常好用,性能也非常不错,但由于价格昂贵,普通的学生是没办法购买的,再加上重量比较大,使用时间长了,难免会让人感觉到疲劳。如果仅仅是为了学习记笔记,那就没必要再去购买…...
经验分享-如何使用http调用chatGPT-3.5-turbo模型API
今天上午,就在工作群里收到了关于openAI发布chatGPT官方模型的消息分享。openAI这次的动作真的很快啊,没想到这么快就直接发布了chatGPT目前所使用的模型api。据Open AI在官方消息,本次开放了ChatGPT和Whisper的模型API,可以供用户…...
【C#】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
C# 日期转字符串 实例化一个时间字符串 DateTimeFormatInfo dfInfonew DateTimeFormatInfo(); dfInfo.ShortDatePattern "yyyy/MM/dd hh:mm:ss:ffff"; DateTime dt Convert.ToDateTime("2019/07/01 18:18:18:1818", dfInfo);日期转字符串 string dat…...
基于神经网络的滑模鲁棒控制
目录 前言 1.双关节机械手臂模型 2.神经网络自适应律设计 3. 滑模控制律设计 4. 仿真分析 4.1 仿真模型 4.2 仿真结果 4.3 小结 5 学习问题 前言 上一篇文章我介绍了神经网络补偿的机理,只不过控制律不同,本章我们结合滑模理论设计控制律&#…...
2023年融资融券研究报告
第一章 行业概况 融资融券是证券交易市场上的两种金融衍生品交易方式,主要用于股票、债券等证券的融资和投资。 融资是指投资者向证券公司借入资金购买证券,以期望股票价格上涨后卖出获得利润。融资需支付一定的利息和费用,利息根据借入的资…...
网站后台信息发布这样做/百度爱采购关键词优化
2019独角兽企业重金招聘Python工程师标准>>> 有这样一种应用场景,在一个海量的数据集合中查看某元素是否存在,同时希望查询速度尽可能快,存储空间尽可能少,比如URL排重,比如UV统计等等。早先数据量不大的时…...
代码做网站常用单词/qq空间秒赞秒评网站推广
某种意义上nt内核用irql解决了一切,这正是由于它有一个基本的,核心的支撑。这就是它的抽象中断框架---IRQL。在linux中,我们知道,如 果我要知道能否调用schedule进行调度,那么我必须知道还有什么数据结构处在临界区&am…...
昆山网站建设培训班/1元购买域名
一、subprocess以及常用的封装函数, 连接文档,Popen不用wait用communicate 运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中࿰…...
烟台网站推广效果好/百度平台投诉人工电话
文档下载地址:Django_2.0_中文教程 http://download.csdn.net/detail/julius_lee/6620099 在线地址:http://djangobook.py3k.cn/2.0/ Django 2.0 Book 关键内容记录,主要是为了帮助记忆和理清整个框架,同时以后忘了可以查看&a…...
利用对象储存做网站/百度收录查询方法
有导式:给出输入和输出 无导式:只给输入,输出分类 >> doc compet >> doc midpoint 用于权值初始化 >> doc initcon 用于阈值初始化 死神经元 Competitive Learning 权值调整,学习率 样本 learnk 权值…...