当前位置: 首页 > news >正文

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优质创作博主,创业者,知识共享者,欢迎关注,点赞&#xff…...

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 进行服务路由。上一篇文章关于服务路由相关逻辑没有细致分析,一笔带过了,本篇文章将对此进行详细的分析。首先&…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

MySQL的pymysql操作

本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...