最近学习了http通信协议

2021-01更新 网络传输控制层,网络层,链路层的简要理解1  

1:应用层
    1.1
2:传输控制层
面向连接的可靠的传输协议
 
 2.1 建立连接
 
程序会以符号代表此socket,通过上面两个队列进行 读和写 其内存数据
2.2 开辟/关闭资源
开辟资源(tcp三次握手)
关闭资源(tcp四次挥手)
C -> S  (clinet请求fin 到server断开连接)
C <-S  (server ack+fin 到clinet)表示收到消息
C <-S  (server fin 通知准备断开连接)
C –>S  (clinet ack 应答断开)


3:网络层
 
从哪发—》发到哪(IP route)
4:链路层
Client->HR(路由器)-》L(运营商)-》ER(目标的路由器)-》Server
Mac地址
 
5:物理层
Eth0一个网卡可用65535; n个网卡 n*65535端口
发送出去,必须网卡出去
删除mac地址,gateway会内网whois 找mac地址
  
 
HTTPS
80传递铭文,443传递密文,如果自签证书一版使用对称/非对称加密,但是特别安全的,利用机构颁发证书,默认会安装到本地机器信任链管理,;

https最核心理论就是通过ca.私钥内容是服务器端公钥+域名+公钥的摘要通过加密算法生成密文(证书)等信息发送到服务端
CA这个能保证:client收到的数据一定是ca.server发出来的,反之亦然,即时被抓包了,没有ca的私钥,只能查看不能修改并发送到clinet;
这也是为什么游览器会提示自签的证书游览器提示不安全;因为自签的证书当server要发送数据到clinet,涉及到公钥证书怎么内置到clinet,只有世界公认机构(交钱的)才会被游览器信任,另外一旦通过网络传输把自签公钥传client可能会被拦截; 这就是个人理解流程

 经过ca颁发的的证书,在clinet请求server过程中,c公钥,会通过ca.
 

http前世今生,摘自官网说明http://www.faqs.org/rfcs/rfc2616.html

超文本传输​​协议(HTTP)是应用程序级
   分布式,协作式超媒体信息协议
   系统。万维网已在全球范围内使用HTTP
   自1990年以来的信息倡议。HTTP的第一个版本,
   称为HTTP / 0.9,是用于原始数据传输的简单协议
   跨互联网。RFC 1945 [6] 定义的HTTP / 1.0进行了改进
   通过允许消息采用类似MIME的格式来实现协议
   消息,其中包含有关传输的数据的元信息,以及
   请求/响应语义上的修饰符。但是,HTTP / 1.0确实
   没有充分考虑到等级制度的影响
   代理,缓存,对持久连接的需求或虚拟
   主机。此外,未完全实施的扩散
   自称“ HTTP / 1.0”的应用程序需要
   协议版本更改,以便进行两个通信应用程序
   确定彼此的真实能力。

   该规范定义了称为“ HTTP / 1.1”的协议。
   该协议包含比HTTP / 1.0中更严格的要求
   为了确保可靠地执行其功能。

   实用信息系统需要比简单更多的功能
   检索,包括搜索,前端更新和注释。HTTP
   允许一组开放式的方法和标头,用于指示
   请求的目的[47]。它建立在参考学科上
   由统一资源标识符(URI)[3]提供,作为位置
   (URL)[4]或名称(URN)[20],用于指示

   方法将被应用。消息以类似于以下格式传递
   多用途定义的Internet邮件[9]使用的
   Internet邮件扩展(MIME)[7]。

   HTTP也用作通用协议,用于
   用户代理和其他Internet系统的代理/网关,包括
   SMTP [16],NNTP [13],FTP [18],Gopher [2],
   和WAIS [10]协议。这样,HTTP允许基本的超媒体
   访问来自各种应用程序的资源。
multipart / form-data 说白了就是说人家食古不化嘛 结果自己嫩的不行学酥
3.7.2多部分类型
 MIME提供了许多“多部分”类型-的封装
   单个邮件正文中的一个或多个实体。所有多部分
   类型共享通用语法,如RFC 2046的 5.1.1节所定义

   [40],并且必须包括边界参数作为媒体类型的一部分
   值。消息主体本身就是一个协议元素,必须
   因此,仅使用CRLF表示身体部位之间的换行。
   与RFC 2046不同,任何多部分消息的结尾都必须是
   空 HTTP应用程序不得传输结尾(即使
   原始的多部分包含结尾)。这些限制存在于
   为了保留多部分消息的自定界性质-
   正文,其中消息正文的“结尾”由
   结束多部分边界。

   通常,HTTP对多部分消息主体的处理与
   任何其他媒体类型:严格作为有效负载。一个例外是
   出现在206中的“ multipart / byteranges”类型(附录19.2)
   (部分内容)响应,将由某些HTTP解释
   缓存机制,如13.5.4和14.16节所述。在所有
   在其他情况下,HTTP用户代理应遵循相同或相似的规定
   收到多部分类型时,作为MIME用户代理的行为。
   多部分邮件的每个正文部分中的MIME标头字段-
   除了对HTTP的定义外,主体对HTTP没有任何意义
   他们的MIME语义。

   通常,HTTP用户代理应该遵循相同或相似的内容
   收到多部分类型时,作为MIME用户代理的行为。
   如果应用程序收到无法识别的多部分子类型,则
   应用程序必须将其视为等同于“多部分/混合”。

      注意:“ multipart / form-data”类型已经特别定义
      用于携带适合通过POST处理的表格数据
      请求方法,如RFC 1867 [15]中所述。

事故还原

视频分包流解析后,要通过接口给其他人用,说:让我“按照标准的http文件上传 multipart/form-data 协议”post给他,我说那字段定义file不如直接定义byte[]喽,省去了写文件操作。

 

【学酥】null 2020/8/10 14:24:27
子悦 base64首先多50%数据,还要花费大片内存和cpu解析
@子悦 是的,他们也说又大又长

【管理员】yedajiang44.com 2020/8/10 14:24:57
@null 你这个射过去的就是multipart/form-data啊

【学酥】子悦 2020/8/10 14:25:00
http  multipart/form-data 一般是会把文件数据缓存在磁盘的 不管多大的文件能都ok

【学酥】子悦 2020/8/10 14:25:17
你要是用base64 ,你穿个几个GB的文件试试

@null 你一句公司老人说白了就是说人家食古不化嘛 结果自己嫩的不行学酥】

@子悦 2020/8/10 14:27:56

那就是说从设备上接收到: 无论图片,视频,音频只要是文件多媒体类型的byte流,都生成file通过multipart/form-data发出去了(跨进程通信)
你按照你公司老人说的http  multipart/form-data方式

【靓仔】鸡汤王子 2020/8/10 15:15:03
@null http  multipart/form-data不需要经过中间文件的。

【靓仔】鸡汤王子 2020/8/10 15:15:44
你自己模拟个TCP服务器,看看通过浏览器上传文件提交上来的数据就知道了,它是通过一个ASCII码的字符串分割开来,作为开始标记,中间还是byte[]数据的。

【靓仔】鸡汤王子 2020/8/10 15:16:11
如果是直播流的话,content-length就不好弄了。

【学酥】null 2020/8/10 15:26:49
鸡汤王子 你自己模拟个TCP服务器,看看通过浏览器上传文件提交上来的数据就知道了,它是通过一个ASCII码的字符串分割开来,作为开始标记,中间还是byte[]数据的。
@鸡汤王子 当时我想的:http post参数里面设置个类型byte[]字段替换multipart/form-data file类型字段; 这拍脑袋想法是从rabbitMq里面的body直接设置byte[]进行传输,不过也不清晰 mq里面body具体怎么实现的,

【靓仔】鸡汤王子 2020/8/10 15:27:08
毳线。

【靓仔】鸡汤王子 2020/8/10 15:27:28
所有的数据都是byte,计算机里最小的存储单元是byte,最小的操作单元是bit。。。

【靓仔】鸡汤王子 2020/8/10 15:27:40
你所谓的file或string或list,都是byte的抽象结构而已。。。

【管理员】yedajiang44.com 2020/8/10 15:28:30
哎。。。为什么这么多人对http了解少之又少?

【学酥】null 2020/8/10 15:29:08
嗯啊,然后想byte被网络编译为byte 应该 比file,String到byte更快些吧

【管理员】yedajiang44.com 2020/8/10 15:30:14
你写byte,只要按照协议走,就行,你现在所说的file都是应用层面上的

【靓仔】鸡汤王子 2020/8/10 15:30:30

【靓仔】鸡汤王子 2020/8/10 15:30:58


【靓仔】鸡汤王子 2020/8/10 15:31:10
比如我上传上面的一张图片,实际上发送过去的数据就是下面这样的。

【靓仔】鸡汤王子 2020/8/10 15:31:58
下面图里的abcdef,是因为它属于ASCII码范围内,所以它能够直接以文字的形式显示出来,如果它不是这个范围内的,那它就会显示为乱码,因为我这个编辑器在尝试把这个数据当作是文本文件,

【靓仔】鸡汤王子 2020/8/10 15:32:10
如果你把它当二进制文件,那它就是~~~反正所有的都是。

我先把分包的视频流byte[] 在内存里聚合然后放到一个file里,用multipart发出去;晚上加个班研究下  不需要经过中间文件 直接传输的,再加个班 网络通信再来两个小时精通课

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值