应用层

应用层

负责应用程序之间的数据沟通-----协议都是用户自己定的

自定制协议:

结构化数据传输

序列化:

将数据对象以指定的协议(数据格式)进行可用于持久化存储或者数据传输时的数据组织
例如在分布式的系统中,需要把对象从网络的一端传输到另外一端;而网络中数据是以二进制流的方式来传递的 ;此时对象的序列化就是完成把对象转化成对应二进制流的方式;反序列化则是把二进制流转化为对象数据的方式。

反序列化:

将二进制数据串按照指定的协议进行解析获取到各个数据对象

序列化的方式:
  1. Json:JavaScript Object Notation, 是一种轻量级的数据交换格式,把对象的状态序列化成为字符串 {属性名:值}格式的字符串,移动端通讯常用数据格式。
  2. protobuf是Google开发的开源项目。protobuf是一种串行化的数据结构信息,类似xml。主要用于消息传输中消息格式规范,数据存储。与xml相比,protobuf更小、更快、更简单、更少歧义、方便生成消息存取类。

知名协议

HTTP-----超文本传输协议

URL:统一资源定位符(网址)

URL格式:

协议名称://用户名:密码@服务器地址:端口/资源路径?查询字符串#片段标识符

查询字符串(用户提交的数据)中若包含特殊字符则需要进行URL编码,因为在URL中特殊字符具有特殊含义。用户提交的数据中若有特殊字符要避免这种二义性
urlencode:将特殊字符每一个字节转换成为16进制数字的字符串,并且在前边加上%


urldecode%2 -('2'-'0')<<4+b-'0'

HTTP协议

HTTP三点注意事项

  1. HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  2. HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  3. HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP协议格式

1.首行:

以空格进行间隔,分了三个部分

1-1请求首行:

  1. 请求方法
  2. URL
  3. 协议版本
    请求方法
    HTTP1.0定义了三种请求方法:GET: 获取资源,提交数据在URL中存放,没有正,POST:传输实体主体,提交数据在正文中出现,有正文,HEAD(获得报文头部,文件有多长)等其他方法。
    协议版本
    0.9/1.0/1.1/1.2-------各个版本之间的新特性
1-2响应首行
  1. 协议版本
  2. 响应状态码
  3. 状态码描述信息
    常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden,认证失败), 302(Redirect, 重定向), 502(Bad Gateway,坏的网关)


2. 头部

都是一个个以冒号空格形式组成的键值对,这些键值对之间以\r\n进行间隔
Conter-Length(标志正文有多长,解决粘包问题)/Content-Type(正文类型)/Referer(跳转位置)/Cookie/Set-Cookie/Location(重定向位置)/Transfer-Encoding(是否进行分块传输)

HTTP响应头消息


3. 空行

\r\n间隔头部与正文

4. 正文

http协议是一个在传输层基于tcp协议实现的应用层协议,在传输层默认使用80端口,使用字符串明文传输

HTTP 协议的 8 种请求类型介绍

HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下:

  1. OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。
  2. HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  3. GET:向特定的资源发出请求。
  4. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
  5. PUT:向指定资源位置上传其最新内容。
  6. DELETE:请求服务器删除 Request-URI 所标识的资源。
  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  8. CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
    虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 get 和 post,其他请求方式也都可以通过这两种方式间接的来实现。

最简单的HTTP服务器

/*                                                                                                                                                                                                               *实现最简单的http服务器1.http实际是一个tcp服务器,不过应用数据的处理是http协议格式2.处理数据的时候:1. 获取http头部(首行+头部)2.获取数据3.根据头部中的请求处理数据3.接受到浏览器的请求之后,打印一下请求的数据,并且响应<html><body><h1>Hello World</h1></body></html>*/
#include<sstream>
#include"tcpsocket.hpp"
int main()
{TcpSocket sock;CHECK_RET(sock.Socket());CHECK_RET(sock.Bind("0.0.0.0",2502));CHECK_RET(sock.Listen());while(1){TcpSocket clisock;std::string cliip;uint16_t cliport;bool ret =sock.Accept(clisock,cliip,cliport);if(ret == false){continue;}std::string buf;clisock.Recv(buf);std::cout<<"req:["<<buf<<"]\n";std::string body;body = "<html><body><h1>Hello World</h1></body></html>";//正文std::string first_line = "HTTP/1.1 200 OK \r\n";//头部std::stringstream header;header << "Content-Length:" << body.size() << "\r\n";//正文长度header << "Content-Type:" << "text/html\r\n";//正文类型std::string blank ="\r\n";//空行clisock.Send(first_line);clisock.Send(header.str());clisock.Send(blank);clisock.Send(body);clisock.Send(body);clisock.Close();}return 0;
}

网络基础 2-1(应用层,HTTP三点注意,HTTP协议格式, 最简单的HTTP服务器)相关推荐

  1. tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议

    近期分享的网络知识包括HTTP协议.DNS协议.HTTPS协议.TCP协议.IP协议.TCP/IP.Web攻击及其他协议.今天内容是TCP协议. TCP协议 1. 传输层 2. 作用 提供可靠的字节流 ...

  2. 计算机网络之应用层:3、文件传输协议FTP、简单文件传输协议TFTP

    应用层:3.FTP.TFTP FTP要解决的问题: 文件传输协议: FTP客户端和服务器: FTP工作原理: FTP要解决的问题: 1.不同计算机存储数据的格式不同 2.文件的目录结构和文件的命名规则 ...

  3. 计算机网络——网络基础知识

    摘要 随着Internet技术的迅速发展,越来越多的计算机连入了Internet.很多公司也将自己公司的局域网接入了Internet.如何快速地访问Internet站点,提高网络的安全性,成为了当今的 ...

  4. 计算机老年学校讲义,广州老年干部大学为老年学员免费普及电脑与网络基础知识...

    近年来,互联网.计算机信息技术发展迅速,已经渗透到生活的方方面面.为帮助老年学员掌握基本的电脑操作技能与网络知识,从而更好地享受到科技给生活带来的种种便利,自2012学年第二学期起,广州老年干部大学在 ...

  5. sdn体系的三个平面_软件定义网络基础---SDN控制平面

    一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑.  对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量:  通过北向接口向上层应用开放多个层次的可编程能 ...

  6. 网络基础2-3(TCP协议,三次握手,四次挥手,TIME_WAIT状态的作用,TCP如何保证可靠传输,TCP连接中状态转化,滑动窗口,流量控制,快速重传,拥塞窗口,延迟应答,捎带应答,粘包问题)

    TCP协议 TCP协议概念 TCP全称为 "传输控制协议(Transmission Control Protocol"). 人如其名, 要对数据的传输进行一个详细的控制 TCP协议 ...

  7. 网络基础应用层--HTTP协议

    网络基础应用层--HTTP协议 一.应用层协议 (一)应用层协议概念 (二)自定义协议概念 (三)数据格式如何定义最优 (四)结构体的二进制序列化 二.HTTP协议 (一)HTTP协议 1.请求-响应 ...

  8. 网络基础 -- 应用层HTTP协议

    目录 应用层(TCP/IP协议中的应用层/HTTP协议) HTTP协议 URL -- 统一资源定位符 UrlEncode / UrlDecode HTTP协议格式 概述 HTTP 请求消息Reques ...

  9. HTTP协议【网络基础/应用层】

    文章目录 1. 网络基础 TCP/IP 2. 与HTTP密切相关的协议 2.1 负责传输的 IP 协议 路由选择 2.2 确保可靠性的 TCP 协议 三次握手 2.3 负责域名解析的 DNS 服务 2 ...

最新文章

  1. skype for business server2015部署向导启动服务失败
  2. SAP 直接修改程序的方法
  3. 数据结构系列(四)栈与队列
  4. 木马的检测、清除与防范
  5. matlab设计理想高斯巴特沃斯低通滤波器_完整二阶有源带通滤波器设计!(下载:教程+原理图+视频+代码)...
  6. 抖音垂直养号,关键词养号,autojs脚本自动
  7. 11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
  8. postgresql 查看索引是否有效及索引使用情况
  9. html tr隐藏 边框存在,CSS 设置tr的边框
  10. 虚拟 DOM 是什么 有什么优缺点
  11. MySQL数据库存储过程讲解与实例
  12. 【如何在寒武纪MLU上进行算法移植】-概述
  13. decltype的使用
  14. php删除帖子代码,删帖 - iptv信源、网络视频直播ip资源、直播代码 - 恩山无线论坛 - Powered by Discuz!...
  15. 06-软件测试计划及测试说明
  16. SQL 行转列 和 列转行 整理
  17. esxi主机配置iscsi_vSphere ESXi主机配置iSCSI存储-阿里云开发者社区
  18. 明日之后mumu模拟器找不到服务器,MuMu模拟器教你玩转《明日之后》,生死之战笑到最后!...
  19. 最新版本 JDK 下载体验
  20. 微信公众号运营,需要注意哪些问题

热门文章

  1. 在Windows运行Python程序
  2. SpringMVC搭建+实例
  3. 优化算法的意义,之二。
  4. 计算机技术与分析化学论文,分析化学(论文).doc
  5. php 开启命令模式,如何启用PhpStorm中的命令行工具
  6. 计算机巧用剪纸做画册教案,大班绘画剪纸制作的教案总结
  7. python运行结果图_[宜配屋]听图阁
  8. python基于web可视化_独家 | 基于Python实现交互式数据可视化的工具(用于Web)
  9. java月历组件_vue之手把手教你写日历组件
  10. python pool_派松水潭(Python Pool)