网络基础2(1)

HTTP

  • 1.应用层协议
  • 2.send和recv单独使用不安全
  • 3.URL
  • 4.urlencode和urldecode
  • 5.HTTP协议格式
  • 6.HTTP中的常见请求方法POST&&GET
  • 7.HTTP的状态码
  • 8.HTTP常见Header

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Linux的学习】
📝📝本篇内容:应用层协议;send和recv单独使用不安全;URL;urlencode和urldecode;HTTP协议格式;HTTP中的常见请求方法POST&&GET;HTTP的状态码;HTTP常见Header
⬆⬆⬆⬆上一篇:网络编程套接字
💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.应用层协议

例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端
我们约定:
定义结构体来表示我们需要交互的信息;
发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体,这个过程叫做 “序列化” 和 “反序列化”,这样能够方便网络通信
只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 这种约定, 就是应用层协议
具体的的网络计算器实现请点击

2.send和recv单独使用不安全

这里的不安全是指send数据发了好多数据,而recv读取数据不完整就造成了解析失败而结果不正确,因此发送的次数和接受的次数,没有任何关系,面向字节流。
IO接口本质都是拷贝函数,TCP叫做传输控制协议,TCP协议是全双工的,客户端和服务器会有所谓的接收发送缓冲区,本质上就是从一个缓冲区,通过从上至下的传输过程,发送到对方的接收缓冲区。

3.URL

平时我们俗称的 “网址” 其实就是说的 URL(Uniform Resource Locator统一资源定位符)
在这里插入图片描述
URL的具体格式:
1、资源在哪台主机上——域名 (domain) 或者ip来体现一主机 (host),浏览器会进行域名解析服务,并没有显示给client
2、和主机上的哪个进程去获取资源——端口 (port)
3、具体定位到是该进程管理的哪个资源——资源路径/路径 (path)
要访问服务器,就要知道对应的port+ip
http服务器的默认的端口号为80
https服务器的默认的端口号为443
在这里插入图片描述
server端的port不能随意更改,必须是总所周知的,端口号和成熟的应用层协议是一一对应的

4.urlencode和urldecode

在这里插入图片描述

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
urldecode就是urlencode的逆过程;

5.HTTP协议格式

在这里插入图片描述
Request:
首行: [方法] + [url] + [版本]
Header: 请求报头, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度;
Response:
首行: [版本号] + [状态码] + [状态码解释]
Header: 响应报头, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在
body中.

6.HTTP中的常见请求方法POST&&GET

浏览器客户端发起,它会构建一个http request,携带POST或GET,使用html表单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
GET能获取一个静态网页
GET也能提交参数,通过URL的方式提交参数,POST,是提交数据的时候,是通过正文部分提交参数的
两者差别:
GET方法提交参数,不私密
POST提交参数比较私密一点
但是他们两者都不安全,所有的登录注册支付等行为,都要使用POST(不只是使用post)方法提取参数,想要保证安全得加密
url的话,http请求行字符串,一般都会有大小约束,而正文理论上可以非常大

7.HTTP的状态码

在这里插入图片描述
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)
这里重点讲一下什么是重定向
在这里插入图片描述
临时重定向:不能随意更改浏览器的任何地址信息
永久重定向:会更改浏览器的本地书签
因此服务器给其返回时会携带Location这个报头,告诉客户端接下来要去哪里访问

8.HTTP常见Header

Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

这里要重点说一下Cookie
首先这指的是http的会话保持功能,http本身是无状态的,http不直接做这个工作,但是用户需要会话保持,用户是否在线要持续记录下来,否则用户每次访问都要进行登录,会非常麻烦

在这里插入图片描述

在这里插入图片描述
可以通过下图的方式查看cookie在这里插入图片描述
查看模拟HTTP响应的代码请点击

🌸🌸HTTP的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git Commit Message规范

概述 Git commit message规范是一种良好的实践,可以帮助开发团队更好地理解和维护代码库的历史记录。它可以提高代码质量、可读性和可维护性。下面是一种常见的Git commit message规范,通常被称为"Conventional Commits"规范: 一…

Zabbix 使用同一ODBC监控不同版本MySQL

一、ODBC介绍 ODBC是Open Database Connect 即开发数据库互连的简称,它是一个用于访问数据库的统一界面标准。ODBC引入一个公共接口以解决不同数据库潜在的不一致性,从而很好的保证了基于数据库系统的应用程序的相对独立性。ODBC 概念由 Microsoft 开发&…

C++指针解读(3)-- 指针变量作为函数参数

函数执行是通过系统栈来实现的,系统栈分为若干个栈帧。栈帧就是函数运行的环境,每个函数在被调用时都会在系统栈区形成一个叫栈帧的结构。一次函数调用相关的数据保存在栈帧中,比如函数参数、函数的局部变量、函数执行完后的返回地址等数据。…

嵌入式C语言自我修养《GNU C编译器扩展语法》学习笔记

目录 一、C语言标准和编译器 二、指定初始化 三、宏构造“利器”:语句表达式 四、typeof与container_of宏 五、零长度数组 六、属性声明:section 七、属性声明:aligned 一、C语言标准和编译器 C语言标准的发展过程: ●…

机器学习笔记 - 使用3D卷积神经网络进行视频分类

1、导入相应的库 3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 首先安装并导入必要的库,用于处理ZIP文件内容的Remotezip 、用于使用进度条的tqdm 、用于处理视频文件的OpenCV 、用于执行更复杂的张量操作的einop…

flink教程

文章目录 来自于尚硅谷教程1. Flink概述1.1 特点1.2 与SparkStreaming对比 2. Flink部署2.1 集群角色2.2 部署模式2.3 Standalone运行模式2.3.1 本地会话模式部署2.3.2 应用模式 2.4 YARN运行模式2.4.1 会话模式部署2.4.2 应用模式部署 2.5 历史服务 3. 系统架构3.1 并行度3.2 …

Android 内存治理之线程

1、 前言 当我们在应用程序中启动一个线程的时候,也是有可能发生OOM错误的。当我们看到以下log的时候,就说明系统分配线程栈失败了。 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory这种情况可能是两种原因导致的。…

springcloud笔记(7)-限流降级Sentinel

官方文档:概述 | Spring Cloud Alibaba basic-api-resource-rule | Sentinel (sentinelguard.io) Sentinel是SpringCloudAlibaba的组件。 sentinel的功能 introduction | Sentinel 流量控制 熔断降级:降低调用链路中的不稳定资源 系统负载保护&am…

Stirling-PDF:一款优秀的开源PDF处理工具

最近我的朋友大雄需要将一个PDF转换为Word文档。于是他在网上尝试了多个PDF转换的在线工具,但要么需要会员,要么需要登录等繁琐操作,而且我们的文件也存在泄漏等安全隐患。因此,他向我咨询是否有可私有化部署且易于使用的PDF在线工…

orgChart.js组织架构图

OrgChart.js是什么? 基于ES6的组织结构图插件。 特征 支持本地数据和远程数据(JSON)。 基于CSS3过渡的平滑扩展/折叠效果。 将图表对齐为4个方向。 允许用户通过拖放节点更改组织结构。 允许用户动态编辑组织图并将最终层次结构保存为…

C# OpenVINO 人脸识别

效果 耗时 Preprocess: 1.41ms Infer: 4.38ms Postprocess: 0.03ms Total: 5.82ms 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Text; using Syste…

爬虫 | 正则、Xpath、BeautifulSoup示例学习

文章目录 📚import requests📚import re📚from lxml import etree📚from bs4 import BeautifulSoup📚小结 契机是课程项目需要爬取一份数据,于是在CSDN搜了搜相关的教程。在博主【朦胧的雨梦】主页学到很多…

EfficientDet: Scalable and Efficient Object Detection

CVPR2020 V7 Mon, 27 Jul 2020 引用量:243 机构:Google 贡献:1>提出了多尺度融合网络BiFPN 2>对backbone、feature network、box/class prediction network and resolution进行复合放缩,有着不同的…

Vmware Linux虚拟机安装教程(Centos版)

文章目录 1.Vmware-workstation安装软件2.双击下载的安装包开始安装3.打开VMware-workstation,输入密钥4.Centos7.6安装软件5.新建虚拟机6.为虚拟机配置映像文件7.开启虚拟机,配置环境7.1 Install Centos 77.2 选择简体中文字体7.3 软件选择7.4 安装位置…

Python 字典

目录 1 字典介绍2 字典的创建3 字典元素的访问4 字典元素添加、修改、删除5 序列解包6 表格数据使用字典和列表存储,并实现访问7 字典核心底层原理(重要)7.1 将一个键值对放进字典的底层过程7.2 扩容7.3 根据键查找“键值对”的底层过程7.4 用法总结: 声…

Linux 系统安装 Redis7 —— 超详细操作演示!

内存数据库 Redis7 一、Redis 概述1.1 Redis 简介1.2 Redis 的用途1.3 Redis 特性1.4 Redis 的IO模型 二、Redis 的安装与配置2.1 Redis 的安装2.2 连接前的配置2.3 Redis 客户端分类2.4 Redis 配置文件详解 三、Redis 命令四、Redis 持久化五、Redis 主从集群六、Redis 分布式…

【C++基础】10. 指针

文章目录 【 1. 指针的定义 】【 2. 指针的调用 】【 3. NULL 空指针 】【 4. 指针的算术运算 】4.1 指针的递加4.2 指针的递减4.3 指针的比较 【 5. 指针与数组 】5.1 通过指针操作数组5.2 指针数组、数组指针 【 6. 指向指针的指针(多级间接寻址)】【 7. 传递指针给函数 】【…

B树、B+树详解

B树 前言   首先,为什么要总结B树、B树的知识呢?最近在学习数据库索引调优相关知识,数据库系统普遍采用B-/Tree作为索引结构(例如mysql的InnoDB引擎使用的B树),理解不透彻B树,则无法理解数据…

Ubuntu 23.10 Beta 镜像开放下载

导读Canonical放出了 Ubuntu 23.10 Beta 镜像,此外 Edubuntu、Kubuntu、Lubuntu、Ubuntu Budgie、Ubuntu Cinnamon、Ubuntu Kylin、Ubuntu MATE、Ubuntu Studio、Ubuntu Unity 和 Xubuntu 等风味版本也同步放出镜像。 近日消息,Canonical 放出了 Ubuntu …

LoRA 是如何工作的?

概述 纯笔记 LoRA的原理 LoRA其实是对稳定扩散模型最关键的部分进行了微小的改变。 这个关键的部分叫:cross-attention layers – 交叉注意力层。 研究人员发现,对这关键部分进行微调就足以实现良好的训练。 上面黄色部分,QKV 部分就是&a…