HTTP/HTTPS协议介绍

news2024/11/23 15:31:04

数据来源

 

HTTP 

01  什么是HTTP

        超文本传输协议(HyperTextTransferProtocol·缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。

        HTP( Hyper Text Transfer Protocol超京本传输协议) · 是一个基于请求与响应 · 无状态的,应用层的协议常基于TCP/IP协议传输数据 · 互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。

        设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

02 HTTP发展历史

版本生产时间内容发展现状
HTTP/0.91991年不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求没有作为正式的标准
HTTP/1.01996年传输内容格式不限制,增加PUT、PATCH、HEAD、OPTIONS、DELETE命令正式作为标准
HTTP/1.11997年持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码2015年前使用最广泛
HTTP/22015年多路复用、服务器推送、头信息压缩、二进制协议等逐渐盖市场 

03 HTTP工作流程

        客户端通过TCP三次握手与服务器建立连接.

        TCP建立连接成功后,向服务器发送HTTP请求。

        服务器收到HTTP请求后,向客户端发送http响向应.

        客户端通过TCP四次断开 . 与服务器断开TCP连接

什么是B/S、C/S架构

  • C/S(lent/ Server)客户机和服务器结构
  • B/S( Browser/ Server)浏览器和服务器结构 

        在HTTP 0.9 和 1.0 中 ·TCP连线在每一次请求/回应对之后关闭闭。

        在HTTP 1.1中 . 引入了保持连线的机制 · 一个连接可以重复在多个请求/回应使用.

        持续连线的方式可大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP握手程序  

三次握手

        所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立

        目的:是建立可靠的通信通道,说到通信,简单来说就是数据的发生与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是否正常

  • 第一次握手:Client(客户端)什么都不能确认,Server(服务器)确认了对方发送正常,自己接收正常
  • 第二次握手:Client确认了:自己发送、接收正常,对方发送正常、接收正常;Server确认了:对方发送正常,自己接收正常
  • 第三次握手:Client确认了:自己发送、接收正常,对方发送正常接收正常;Server 确认了:对方发送正常,接收正常,自己发送正常,接收正常。
  • 第四次次握手:客户端通过TCP四次断开 . 与服务器断开TCP连接

 04 统一资源定位符(URL)

        URL(统一资源定位符):我们常说的网址 · 包含了用于查找资源的足够的信息 · 而一个完整的URL包含下面几部分;

  • 协议方案名:http,ftp,file,mailto,teinet,idap......
  • 登录信息:如果网页需要认证时 · 需要填写该参数 · 所以是可选项
  • 服务器地址:可以使P地址形式 · 也可以是能被DNS解析为IP地址的域名形式
  • 端口号:指定服务器连接的端口号 · 也选填不填则指向本协议的默认端口号
  • 带层次的文件路径:获取资源在服务器中的具体地址
  • 查询字符串:针对已指定路路径的资源 · 可使用查询字符串来获取想要的参数 · 此项也是可选项
  • 片段标识符:信息片段字符串 · 用来标记已获取资源中的子资源(在文档中的某个位置) 

05 统一资源标志符(URI)

        URl(Universal Resource Identifier统一资源标志符)· 用来标识抽象或物理资源的一个紧凑字符串。

        HTTP 是基于客户端/服务端(C/S)的架构模型 · 通过一个可靠的链接来交换信息 · 是一个无状态的请求/响应协议。

        HTTP 使用统一资源标识符(UniformResourceIdentifiers,URI)来传输数据和建立连接

URI和URL的区别URL是URI的一个子集

06 下面那些是URL?

07 客户端请求消息

HTTP请求报文:web客户端向服务器发送的请求

HTTP请求由四个部分组成:

  • 请求行
  • 请求头部
  • 空行
  • 请求数据

请求行:

        Method Request-URL HTTP-Version CRLF

  • Method:表示请求方法
  • Request-URL:是一个统一资源标识符
  • HTTP-Version:表示请求的HTTP协议版本;
  • CRLF:表示回车和换行

请求方法:

  • GET                  请求获取 Reques-URI所标识的资源
  • POST                在Request-URL 所标识的资源后附加新的数据
  • HEAD                请求获取由 Request-ur所标识的资源的响应消息报头
  • PUT                   请求服务器存储一个资源·并用 Request-ur作为其标识
  • DLETE               请求服务器删除 Request-uri所标识的资源
  • TRACE              请求服务器回送收到的请求信息,主要用于测试或诊断
  • OPTIONS          请求查询服务器的性能·或者查询与资源相余的选项和需求
  • CONNECT         保留将来使用·HTP/1协议中预留给能够将连接改为管道方式的代理服务器
  • PATCH               用于将局部修改应用到资源(由RFC5789指定的方法)

请求头部字段:( Request Header Fields)

        Header:Header Value CRLF

        允许客户端传递关于自身的信息和希望的响应形式。

        在HTTP/1.1协议中 · 所有的请求头 · 除HoSt外 · 都是可选

空行:

        表示请求头结束 · 请求正文(请求体)开始

请求数据:

GET方法:提交数据时 · 数据参数会做为URL的一部分放在文件路径后面发送给服务器 · 被称为查询字符串

        http://www.hetianlab.comusername=12345%40qq.com&password=2f7402f...a592b&validateCode=&rtnjson=true

POST方法:

        发送的数据在请求体中

        username=12345%40qq com& password=2f7402f..a592b&validate Code=&rtnjson=true

08 服务器响应消息

HTTP响应报文:在接收和解释请求消息后 . 服务器返回一个HTTP响应消息

HTTP响应也由四个部分组成·分别是:

  • 状态行
  • 消息报头
  • 空行
  • 响应正文 

状态行

HTTP-Version Status-Code Reason-Phrase CRLF

  • Http-Version:表示服务器HTTP协议的版本;
  • Status-Code:表示服务器发回的响应状态代码
  • Reason-Phrase:表示状态代码的文本描述

状态码:

状态代码有三位数字组成 · 第一个数字定义了响应的类别 · 且有五种可能取值:

  • 1xx:指示信息--请求已被服务器接收 · 继续处理
  • 2xx:成功-请求已成功被服务器接收 · 理解、并技受
  • 3xx:重定向-需要后续操作才能完成这一请求
  • 4xx:客户端错误-请求有语法错误或请求无法实现
  • 5xx:服务端错误--服务器在处理某个正确请求时发生错误 

常见状态码

  • 200 OK                               #  客户端请求成功
  • 400 Bad Request               #  客户端请求有语法错误 · 不能被服务器所理解
  • 401 Unauthorized               #  请求未经授权 · 这个状态代码必须和WWW- Authenticate 报头域一起使用
  • 403 Forbidden                    # 服务器收到请求·但是拒绝提供服务
  • 404 Not Found                   #  请求资源不存在 ·eg:输入了错误的URL
  • 500 Internal Server Error   # 服务器发生不可预期的错误
  • 503 Server Unavailable     # 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 

响应头部字段(Response Header Fields)

        响应报头允许服务器传递不能放在状态行中的附加响应信息 · 以及关于服务器的信息和对 Request-URI所标识的资源进行下一步访问的信息

空行:

        表示请求头结束 · 请求正文(请求体)开始

响应数据:

        服务器返回的资源内容

        {"result". "success", "message":null"}

10  HTTP请求方法理解

GET

  • GET:获取/查询资源
  • 不包含请求主体
  • 请求参数一般是用“?”拼接在请求的URL后面

POST

        POST:在 Request-URI所标识的资源后附加新的数据

        用于向指定资源发送数据 · 指定的资源会对数据进行处理 · 然后将处理结果返回给客户端 · 一般用于表单提交文件上传

  • POST提交数据的几种 Content-Type
  • application/xwww-form-urlencoded:最常见的POST提交数据方式 · 浏览器支持的原生form表单multipart/ form-data:这和方式一般用来上传文件
  • application/json:在响应头中很常见 · 在请求头中用来告诉服务端消息主体是序列化后的json字符串 

HEAD

        HEAD:请求获取由 Request-URI所标识的资源的响应消息报头首部 · 不会返回报文主体

OPTIONS

        查询资源支持的方法

PUT

        PUT:请求服务器存储一个资源,并用 Request-REI 作为其标识

        服务器会将请求主体的内容保存到RL指定的资源位置 · 包含两种情况:

        1. URL指定的资源不存在 · 服务器新建一个文件 · 将请求主体中的内容保存到新建的文件里 ·响应码为201

        2. URL指定的资源存在 · 服务器会重置文件内容 · 用请求主体中的内容覆盖原文件内容 · 响应码为200或204

DELETE

        DELETE:请求服务器删除 Request-URI所标识的资源

TRACE

        路径追踩 · 请求服务器回送收到的请求信息 · 主要用于测试或诊断发送的请求是否在客户端与服务端之间传送时被网、防火墙丶代理更改。 

HTTPS和HTTP的区别

        HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。https则是具有安全性的ssl加密传输协议。http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。并且https协议需要到ca申请证书。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

        HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql快速生成100W条测试数据(7)虚拟网站、IP地址并存入mysql数据库

这是之前的文章里面包含一些以前的一些操作流程可以进行参考学习 更加详细操作步骤在第一篇文章里面 mysql快速生成100W条测试数据(1):游戏人物数据 mysql快速生成100W条测试数据(2)公司员工信息 mysql快速生成100W条测…

《Unity Shader 入门精要》第2章 渲染流水线

第2章 渲染流水线 2.1 什么是渲染流水线 渲染流水线的工作在于由一个三维场景出发,生成一张二维图像。换句话说,计算机需要从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张肉眼可见的图像,而这个过程通常由CPU与G…

静态链接过程分析

前期准备这边使用《程序员的自我修养》中的例子//a.cpp extern int shared;void swap(int* a, int *b);int main(){int a 100;swap(&a, &shared); }//b.cpp int shared 1;void swap(int* a, int* b){*a ^ *b ^ *a ^ *b; }通过gcc -c 命令编译出相对应的.o文件&#x…

五,Spring Bean生命周期

1 Spring Bean的生命周期(概念重点) 对象的生命周期:对象从生到死的过程。 Spring工厂中Bean的生命周期并不像想象的那么简单,Spring对工厂中的Bean的生命周期进行了细致的划分,并允许开发者通过编码或配置的方式定制…

Ubuntu18 sqlyog配置mysql5.7远程连接

mysql 配置远程连接 1. mysql安装和配置 sudo apt-get install mysql-server-5.7 systemctl status mysql service mysql status修改mysql的配置文件: sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf以下为mysqld.cnf文件主要内容,这里的skip-grant-ta…

基于51单片机的pm2.5空气质量监测仪仿真设计

51单片机pm2.5监测仪仿真设计( proteus仿真程序报告讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0032 51单片机pm2.5监测仪仿真设计主要功能:讲解演示视频仿真程序设计…

代码整洁提升方案

验-言 公共方法都要做参数的校验,参数校验不通过明确抛出异常或对应响应码: Java Bean验证已经是一个很古老的技术了, 会避免我们很多问题; 在接口中也明确使用验证注解修饰参数和返回值, 作为一种协议要求调用方按…

win11 arm 系统安装安卓子系统

一般的x86电脑如果安装android子系统,运行安卓子系统,由于要将android arm代码转译为x86代码,所以效率不一定高,但是如果电脑是arm架构的,通过安卓子系统运行android的程序执行效率就会 高不少,本文参考,都…

JVM面试题

Java内存区域 说一下 JVM 的主要组成部分及其作用? JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Class loader…

Es6的Promise

Promise是异步编程的一种解决方案。简单来说Promise就是一个用来存储数据的对象,它有着一套特殊的存取数据的方式。可以解决异步回调函数/回调地狱问题。创建Promise1.创建Promise时需要一个 回调函数 作为参数这个回调函数会在Promise时 自动调用2.调用回调函数时&…

基于matlab的指纹图像处理、脊线增强、脊线分割、脊线细化、细节点检测和细节点验证

需求分析对于指纹的特征提取包含几个步骤,脊线增强、脊线分割、脊线细化、细节点检测和细节点验证,本次大作业需要针对已经增强的指纹图片进行后续几个步骤,通过多种形态学算法进行分割、细化、细化后处理,找到其中的端点和分叉点…

elasticsearch基础2——es配置文件、jvm配置文件详解

文章目录一、配置文件详解1.1 elasticsearch.yml文件1.1. 1 基础参数1.1.1.1 自定义数据/日志目录1.1.1.2 锁定物理内存1.1.1.3 跨域设置1.1.1.4 其他参数1.1.2 集群类1.1.3 分片类1.1.4 IP绑定类1.1.5 端口类1.1.6 交互类1.1.5 Xpcak安全认证1.1.5.1 xpack内置用户1.1.5.2 xpa…

LabVIEW使用VI脚本向VI添加对象

LabVIEW使用VI脚本向VI添加对象可使用VI脚本向前面板和程序框图添加对象。该教程以向程序框图添加对象为例。按照下列步骤,通过VI脚本向VI添加对象。创建VI前,需先了解VI脚本的基本内容。必须启用VI脚本,才能显示VI脚本选板,使用相…

aws beanstalk 理解和使用eb工作线程环境

参考资料 beanstalk 工作线程环境beanstalk 工作线程环境管理https://catalog.us-east-1.prod.workshops.aws/workshops/b317e4f5-cb38-4587-afb1-2f75be25b2c0/en-US/03-provisionresources 理解 beanstalk 工作线程环境 https://docs.amazonaws.cn/elasticbeanstalk/latest…

【Java基础】-【线程】

文章目录创建线程的方式Thread类的常用方法run()和start()有什么区别?线程是否可以重复启动,有什么后果?线程的生命周期实现线程同步Java多线程之间的通信方式sleep()和wait()的区别notify()、notifyAll()的区别如何实现子线程先执行&#xf…

GaussDB(DWS)数据库的数据迁移实操【玩转PB级数仓GaussDB(DWS)】

GaussDB(DWS)数据库的数据迁移实操【玩转PB级数仓GaussDB(DWS)】 1.1先了解一下Gauss数据库 Gauss数据库并非完全自主开发。它可以看作是基于PostgreSQL 9.2的一次神奇的修改。正如Redhat和Android都源于LINUX的研发,IBM AIX和IOS都源于UNIX的研发一样,…

16、ThingsBoard-配置OAuth2

1、概述 如果你的系统想要接入第三方认证来登录,就像国内很多网站都支持微信、QQ等授权登录,其实thingsboard也提供了OAuth2.0来支持,ThingsBoard 是支持授权码授权类型来交换访问令牌的授权码,同时它自己也提供了几种方式 Google、GitHub、Facebook、Apple 同时也支持自定…

使用numpy进行深度学习代码实战

使用方法定义网络from net import ConvNet net ConvNet() if not net.load(MODEL_PATH): net.addConvLayout([3,3,1,4],bias True,paddingVAILD,init_typeinit_type,st_funcLEAKY_RELU_0.01)net.addConvLayout([3,3,4,8],bias True,paddingVAILD,init_typeinit_type,st…

weblogic反序列化之T3协议

前言 weblogic 的反序列化漏洞分为两种 ,一种是基于T3 协议的反序列化漏洞,一个是基于XML的反序列化漏洞,这篇来分析一下基于T3 协议的反序列化漏洞。 环境搭建: [JAVA安全]weblogic反序列化介绍及环境搭建_snowlyzz的博客-CSDN…

Virtualbox设置固定IP

Virtualbox桥接实现静态固定IP内外网访问 super_kancy 2018-10-20 11:55:28 6024 收藏 7 展开 桥接实现静态固定IP内外网访问 第一步、安装好一个虚拟机linux01 第二步、配置网卡,选择桥接网卡模式,并且指定桥接的具体的网卡 第三步、正常启动虚拟机lin…