HTTP基本原理
目录
- URL
- 简单定义
- 格式
- HTTP和HTTPS
- HTTP的请求过程。
- 请求
- 响应
- 响应体
- HTTP2.0
- 总结
URL
简单定义
通过一个链接,使我们可以找到网络上的某个资源,这个链接就是URL。
格式
URL并不是随便写的,而是有固定的格式。基本的组成格式如下。
schme://[username:password] hostname[:port][/path][;paramaters][?query][#fragment]
中括号包含的内容并不是必须的。
scheme:协议,常用的协议有http,https,ftp等。
username:password:特定场合下需要用到用户名和密码。
hostname:主机地址,可以是域名或者IP地址。
port:端口。指服务器设定的端口,http默认的端口是80,https的端口是440.
path:网络资源在服务器中的特定地址。
paramters:参数,用来指定某个访问资源时的附加信息。但现在用的不多,基本上会和query混用。
query:参数,用来查询某个资源,当查询多个资源时,可以用&连接。
fragment:有两个作用,一个作用是作单页面路由,另一个作用是做html锚点。可以控制一个页面打开时,自动滚到某个特定的位置。
HTTP和HTTPS
http超文本传输协议,作用是把超文本数据从网络传输到本地浏览器。而https则是http的安全版,在http层加入ssl,简称https。https的基础就是SSL,他的作用主要有以下两种:
1.建立一个信息安全通道,保证数据传输的安全性。
2.确认网站的真实性,凡是使用了https协议的网站,可以用单机鼠标烂地址的锁头标志来查看网站之后的真实信息。
HTTP的请求过程。
就像我们平常直接在浏览器地址栏输入一个URL,则我们可以看到对应页面的内容。实际的过程就是浏览器向网站所在的服务器发送一个请求,网站服务器接收到请求后对其进行处理和解析,然后返回对应的响应,接着传回浏览器,浏览器再对其进行解析。
请求
请求由客户端发向服务器,分为四部分内容,请求方法,请求网址,请求头,请求体。
请求方法:常用的get,post,delete,put。
简单介绍以下get和post。
GET:get的请求参数包含在URL里面,数据可以在URL中看到,而post请求的url不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
GET请求的数据最多只有1024字节,POST方法没有限制。
请求网址:确定客户端想请求的资源。
请求头:说明服务器要使用的附加信息,常用的比如Cookie,Referer,User-Agent等。下面举一些简单的请求头信息。
Accept:指定客户端可以接受的哪些类型的信息。
Accept-Language:用于指定客户端接受的语言类型。
Accept-Encoding:用于客户端可接受的内容编码。
COOKIE:为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前对话,例如当我们登入进一个网站之后,即使我们刷新之后,还是会保留原来自己的登录状态。
Refer:用来标识是从哪个页面发过来的。
User-Agent:简称UA 这是一个特殊的字符串头,可以使服务器识别客户端使用的操作系统。版本,浏览器的相关信息。做爬虫时需要加入信息来伪装成浏览器,要不容易被识别出来。
Content-Type:也叫互联网媒体类型,或者MIME类型,在HTTP协议消息头中用来表示具体请求的媒体类型信息,例如text/html代表的是HTML格式。image/gif代表的是GIF图片,application/json代表JSON类型。
请求体:一般就是post请求中的表单数据。
响应
响应,即Response,有服务器返回给客户端,分为三个部分,响应状态码,响应头和响应体。
响应状态码,常用的有200代表服务器正常响应,404代表服务器未找到,500代表服务器内部错误。
响应头,包含了服务器对请求的应答信息,如Conten-type等。DATE:用于标识响应产生的时间,Content-Encoding:用于指定响应内容的编码。Sever:包含服务器的信息。Content-type:文档类型,指定返回的数据是什么类型。
Exipres:用于指定的响应的过期时间。
响应体
响应体的正文数据都存储在于响应体中。
HTTP2.0
HTTP2.0对HTTP进行了一些优化。二进制分帧层,将文本格式的数据修改为二进制格式。使得解析起来更加高效、同时将请求和响应数据分为更小的帧,并采用二进制编码。引入了几个新的概念。如帧:是数据通信的最小单位。比如一个请求被分为了请求头帧和请求体数据帧。数据流:一个虚拟通道,可以承载双向的消息,每一个流都有一个唯一的整数ID来标识。
消息:与逻辑请求或响应消息对应的完整的一系列帧。
多路复用:在之前的版本中,如果客户端想发起多个并行的请求用来提升性能,则必须使用多个TCP来连接,而且浏览器为了控制资源,还会对单个域名有6-8个请求的限制,但是在HTTP2.0中,由于有了进制分帧的加持,HTTP2.0不再用TCP连接的方式来实现多路并行,客户端和服务器将HTTP消息分解为互不依赖的帧,然后交错发送,最后再另一端组装起来,达到了并行交错的发多个请求,请求之间互不影响。提高现有网络容量的利用率,从而减少页面加载时间。
流控制:流控制是用来阻止发送方向接受方发送大量数据的机制,以免超出后者的需求能力。
服务端推送:服务器可以对一个客户端发送多个响应。除了最除的响应外,服务器可以向客户端推送额外的资源,而无需向客户端明确的请求。服务端可以主动推送,则客户端也有权选择拒绝,如果推送的资源已经被浏览器进行缓存,浏览器可以通过RST_STREAM帧来选择拒收。
另外主动推送也遵守同源策略,即服务器不能随便将第三方资源推给客户端,而必须是经过服务器和客户端双方确认才行,这样能保证一定的安全性。
总结
对HTTP的基本知识进行复习和梳理。
相关文章:
HTTP基本原理
目录URL简单定义格式HTTP和HTTPSHTTP的请求过程。请求响应响应体HTTP2.0总结URL 简单定义 通过一个链接,使我们可以找到网络上的某个资源,这个链接就是URL。 格式 URL并不是随便写的,而是有固定的格式。基本的组成格式如下。 schme://[us…...
【云原生】Kubernetes(k8s)最新版本详细保姆级安装教程
前言 Kubernetes简称k8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,k8s目标是让部署容器化的应用简单并且高效,k8s提供了应用部署,规划,更新,维护的一种机制。 本文是总结了在安…...
JVM - 类加载,连接和初始化
目录 类加载和类加载器 概述 类加载要完成的功能 加载类的方式 类加载器 类加载器的关系 类加载器说明 双亲委派模型 工作过程如下: 双亲委派模型说明: 破坏双亲委派模型: 类连接和初始化 类连接主要验证的内容 类连接中的解析…...
[carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题
1.获取车辆的Odometry原始信息 在carla中,通过订阅/carla/ego_vecle/odometry 可以查看车辆的全局位置信息,例如: > header: seq: 118872stamp: secs: 5946nsecs: 5720187frame_id: "map" child_frame_id: "ego_vehicle" pos…...
Python 正则表达式
正则表达式主要用来查找和匹配字符串的。 一、正在表达式基础 字符 描述 示例 TIY\ 示意特殊序列(也可用于转义特殊字符)如:空白字符 "\s" . 任何字符(换行符除外) "he..o" ^ 起始于 "^h…...
spark03-读取文件数据分区数量个数原理
代码val conf: SparkConf new SparkConf().setMaster("local").setAppName("wordcount")val sc: SparkContext new SparkContext(conf)val rdd: RDD[String] sc.textFile("datas/1.txt",2)rdd.saveAsTextFile("output")数据格式 &a…...
操作系统(day08)内存
存储单元 内存的几个基本概念 存储单元 内存地址从0开始,每个地址对应一个存储单元 存储单元大小根据计算机按照什么方式编址 按字节编址 则每个存储单元大小为一字节,即1B,即8个二进制位按字编址 看这个计算的字长是多少位,如…...
11- 聚类算法 (KMeans/DBSCAN/agg) (机器学习)
聚类算法 聚类算法和降维算法那都属于无监督算法。KMeans 是以一个值为中心, 然后所有其他点到该点距离最小值的累积和。 kmeans KMeans(n_clusters3) # n_clusters 分类数量 kmeans.fit(data.iloc[:,1:]) # 无监督,只需要给数据X就可以 DBSCAN 算法是…...
日日顺供应链|想要看清供应链发展趋势,先回答这三个问题
技术变革如何支撑供应链及管理服务的发展? 数字化与科技化开始承托供应链管理能力的升级与变革? 如何从客户需求的纬度反推供应链及管理服务的模式变革?在过去的三年中,我国的供应链企业经受了最为极端的挑战,但当下&a…...
5守护进程与线程
进程组 多个进程的集合,第一个进程就是组长,组长进程的PID等于进程组ID。 进程组生存期:进程组创建到最后一个进程离开(终止或转移到另一个进程组)。与组长进程是否终止无关。 一个进程可以为自己或子进程设置进程组 ID 相关函数 pid_t …...
EZ-Cube简易款下载器烧写使用方法
一、硬件连接 跟目标芯片接4根线 VCC、GND、TOOL、REST 四根线,如果板子芯片自己外接电源的,VCC 线可以不接。 二、 安装烧写软件和驱动 烧写软件:https://download.csdn.net/download/Stark_/87444744?spm1001.2014.3001.5503 驱动程序&a…...
sql server安装并SSMS连接
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞ÿ…...
Python_pytorch (二)
python_pytorch 小土堆pytotch学习视频链接 from的是一个个的包(package) import 的是一个个的py文件(file.py) 所使用的一般是文件中的类(.class) 第一步实例化所使用的类,然后调用类中的方法(def) Torchvision 数据集 数据集使用(CI…...
java手机短信验证,并存入redis中,验证码时效5分钟
目录 1、注册发送短信账号一个账号 2、打开虚拟机,将redis服务端打开 3、创建springboot工程,导入相关依赖 4、写yml配置 5、创建controller层,并创建controller类 6、创建service层,并创建service类 7、创建工具类&#x…...
kubectl命令控制远程k8s集群(Windows系统、Ubuntu系统、Centos系统)
文章目录1. 本地是linux2. 本地是Windows1. 本地是linux 安装kubectl命令 法一:从master的/usr/bin目录下拷贝kubectl文件到本机/usr/bin目录下法二:GitHub下载kubectl文件 在家目录下创建.kube目录config文件 法一:将master上对应用户的~/.…...
【求解器-COPT】COPT的版本更新中,老版本不能覆盖的问题
【求解器-COPT】COPT的版本更新中,老版本不能覆盖的问题方法1方法2如果license还是找不到作者:刘兴禄 参考网址: COPT的下载和配置步骤如下: 教程 | Windows系统下如何安装COPT求解器并配置许可文件: https://zhuan…...
Vue3.0文档整理:一、简介
1.1:什么是vue? Vue是一款用于构建用户界面的javascript框架;它基于标准HTML、CSS和Javascript构建,并提供了一套声明式、组件化的编程模型,帮助你高效的开发用户界面。 1.2:MVVM工作原理 MVVM指的是model、view和vie…...
vue2 diff算法及虚拟DOM
概括:diff算法,虚拟DOM中采用的算法,把树形结构按照层级分解,只比较同级元素,不同层级的节点只有创建和删除操作。 一、虚拟DOM (1) 什么是虚拟DOM? 虚拟 DOM (Virtual DOM,简称 VDOM) 是一种…...
Ray和极客们的创新之作,2月18日来发现
所在论坛:数据库技术创新&云原生论坛分享时段:2.18 10:30-11:00分享主题:云原生数据库PieCloudDB :Unbreakable安全特性剖析分享嘉宾:王淏舟,拓数派资深研发工程师 由中国开源软件推进联盟PostgreSQL分…...
Dubbo 源码分析 – 集群容错之 Router
1. 简介 上一篇文章分析了集群容错的第一部分 – 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由。上一篇文章关于服务路由相关逻辑没有细致分析,一笔带过了,本篇文章将对此进行详细的分析。首先&…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
