【计算机网络】HTTP协议

文章目录

  • 1. HTTP介绍
    • 认识URL
  • 2. HTTP消息结构
    • 请求request
    • 响应response
  • 3. HTTP请求方法
  • 4. HTTP报头
  • 5. HTTP响应状态码
  • 6. Cookie和Session


1. HTTP介绍

HTTP(hypertext transfer protocol)是一种常用的应用层协议,用于在计算机之间传输超文本数据。 它是Web通信的基础,客户端(通常是浏览器)和服务器使用HTTP协议传输网页、视频、图片等资源。下面是HTTP协议的一些特性:

  1. 基于请求-响应模型。 浏览器客户端发送HTTP请求,请求中包含客户端欲获得的资源,服务器接收并处理请求,并返回响应到客户端,响应通常包含客户端请求的资源和状态信息。
  2. HTTP是无状态的。 “无状态”也可称为“无记忆”,即客户端每次HTTP请求都是独立的,服务器不会在多个请求之间保留关于客户端的状态信息,这意味着服务器看待每个请求都像是孤立的,新的事件。
  3. 持久连接: 为了提高性能,HTTP/1.1引入了持久连接,允许多个请求和响应在同一TCP连接上传输,减少了连接建立和拆除的开销。在此之前的HTTP/1.0是无连接的,即发送一次请求创建一个新连接。

认识URL

URL(uniform resource Locator)统一资源定位符,是HTTP标识某个特定资源的方式,可以定位资源的地址。

在这里插入图片描述

Scheme: 表明浏览器使用哪种协议,通常是http或https(安全版http,后面详谈)。

Domain Name: 服务器域名,标识申请资源在哪一台服务器上,本质上是一个ip地址,也可以直接用服务器的ip地址。

Port:服务器端口号。http/https协议规定了标准端口号(http: 80, https: 443),若URL此项为空则根据Scheme默认使用标准。

Path to the file: 请求资源在服务器上的路径。这个路径虽然看起来以根目录起始,但在服务器中一般是在某个wwwroot文件夹下的。

Parameters: 提交到服务器的一些参数,从?开始,以key=value的形式保存并以&为分隔符隔开。服务器可以使用这些参数来执行额外的操作,具体作何操作由服务器决定。

Anchor: 片段标识符,从#开始。锚点表示资源中的一种“书签”,给浏览器显示位于该“加书签”位置的内容的方向。例如,在 HTML 文档上,浏览器将滚动到定义锚点的位置。

📝参考文章:

什么是URL?


2. HTTP消息结构

💭先认识HTTP请求和响应的宏观结构,再深入理解结构中的不同内容。

请求request

🔎HTTP请求(request)结构如下:

在这里插入图片描述

请求由四部分构成,分别为:请求行、请求报头、空行和正文。每部分由分隔符\r\n以行的形式隔开。

  1. 请求行(request line):包含请求方法(最常见的是GET和POST)、URL和http协议版本(HTTP/1.0, HTTP/1.1),每部分以空格分隔。这里的URL不一定是携带域名和端口号的完整URL,一般只是服务器资源路径,因为HTTP客户端已经知道您要访问的资源来自哪个主机地址,通常会保存在请求报头的Host字段中。
  2. 报头(headers):请求的属性,以冒号分割的键值对,每组属性之间用\r\n隔开。
  3. 空行:空行代表报头部分的结束,进入正文部分
  4. 正文(body):若请求是POST/PUT等用于上传的方法,正文可以包含上传至服务器的数据资源。对于GET请求,请求正文通常是不包含数据的。

响应response

🔎HTTP响应(response)结构如下:

在这里插入图片描述

响应同样由四部分构成,分别为:状态行、响应报头、空行和正文。每部分由分隔符\r\n以行的形式隔开。

  1. 状态行(response line):包含协议版本、状态码、(状态码对应的)状态描述
  2. 响应报头(headers):响应的属性,以冒号分割的键值对,每组属性之间用\r\n隔开。
  3. 空行:空行代表报头部分的结束,进入正文部分
  4. 正文(body):发送给客户端的各种类型的资源,如:网页资源、视频、图像等。本质是二进制数据,客户端收到后会根据正文类型(Content-Type,响应header的一种)做解析,得到自己想要的资源。

3. HTTP请求方法

📝根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

  • HTTP/1.0定义了三种请求方法:GET, POST 和 HEAD 方法。

  • HTTP/1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

请求方法描述
GET请求指定资源,返回资源实体
POST向指定资源提交数据进行处理请求,如:提交表单、上传各种文件。数据包含在请求正文中,POST可能会导致新资源的创建或已有资源的修改。POST请求不会在客户端缓存,因此浏览器查无POST请求记录。
HEAD类似于GET,不同的是请求后返回的响应没有具体的正文内容,只用于获取响应报头。
PUT向服务器中指定的URL路径上传或更新完整的资源。
DELETE请求服务器删除指定页面
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。
  • GET和POST方法都可以向服务器提交参数,区别在于GET通过URL提交,而POST通过请求正文提交。

    例子:form表单提交参数,可选择提交参数的方式GET/POSE,可以对比两种方式服务器收到请求的区别。(测试环境为作者自行编写的一个简单的HTTP服务器)

    若选择method=“GET”

    在这里插入图片描述

    若选择method=“POST”

    在这里插入图片描述

  • POST和PUT的区别:POST通常用于执行各种不同的操作,提交某些请求数据,以供服务器完成特定的处理,如登录账号。PUT一般是向服务器指定路径上传或更新完整的文件资源,路径存在则更新,路径不存在则创建。


4. HTTP报头

💭HTTP Header有很多种,这里总结几个比较重要的Header,具体内容可以参考文章:

📝HTTP响应头和请求头信息对照表

Header Key解释示例适用于
Content-Type正文内容的类型Content-Type: text/html请求、响应
Content-Length正文内容的长度Content-Length: 1024请求、响应
Host请求服务器的ip地址和端口号Host: ip:port请求
User-Agent客户端信息(含OS、浏览器版本)User-Agent: Mozilla/5.0 (Linux; X11)请求
Cookie用户状态信息Cookie: sessionID=27请求
Set-Cookie设置用户状态信息Set-Cookie: sessionID=27响应
Location搭配3XX状态码使用,告知客户端重定向地址Location: /a/b/c.html响应

📝HTTP Content-Type 对照表

有关Cookie的两个header,后面详细分析。


5. HTTP响应状态码

服务器返回到客户端的响应,必须包含状态码,告知用户请求处理完毕的结果。常见的我们日常会遇到的网页404 Not Found错误,404就是一种状态码。

状态码大致大致有五个范围:

  • 1XX:提供某种附加信息
  • 2XX:请求成功
  • 3XX:重定向
  • 4XX:客户端错误
  • 5XX:服务端异常

常见的几个状态码及对应的状态描述:

状态码状态描述解释
200OK请求成功
301Moved Permanently永久重定向
302Found临时重定向
400Bad Request请求语法错误,服务器无法理解
403Forbidden服务器拒绝用户请求
404Not Found服务器无法根据请求找到资源
500Internal Server Error服务器内部错误,无法完成请求

关于重定向

这里的重定向指的是:客户端接收到状态码为3XX的响应时,会重新定位新的资源,即发送新的请求。3XX状态码一般搭配报头Location使用,由Location指定新的URL。

301状态码是永久重定向,告知客户端请求资源已永久转移到另一个URL。客户端收到301响应后,会更新其书签、链接或缓存,以便下次请求时直接使用新的URL。对于搜索引擎来说,内部存储了大量的索引信息(关键词->URL),当访问某网站时收到301响应,则会修改搜索引擎内部的索引。

302状态码是临时重定向,告知客户端请求资源只是暂时转移到另一个URL,客户端收到302响应后并不会修改其缓存信息。临时重定向通常也被应用在一些需要做网页跳转的场景,如:用户登录、广告植入等等。


6. Cookie和Session

💭场景:当我们用浏览器登录一次b站后,接下来很长一段时间都不用重新登录了,每次访问b站都是直接用的。可这似乎和我们之前提及的http特性相悖:http不是无状态的吗?既然无状态,为什么登录一次之后,浏览器能“记住”我的登录信息呢?不应该是每次访问都要重新登录吗?

事实上,按照http“无状态”的特性来讲,确实每次访问都需要重新登录,可这会让用户的体验极差。因此,浏览器客户端使用了Cookie的概念,解决了这一问题。Cookie是一种维护用户状态和跟踪用户身份的机制,本质是一种保存在客户端(浏览器)的轻量级文本文件,当用户访问某个网站时,浏览器会将Cookie数据打包在请求中(以Header形式存在),发送给服务器。

为什么说Cookie能解决http无状态的问题,实现用户无需频繁重新登录的功能?下面模拟Cookie在用户两次访问b站期间的作用过程。

在这里插入图片描述

但是上面这种客户端直接发送Cookie的做法并不安全,因为传输过程中,黑客能够盗取用户的Cookie,获得用户的账号密码并进行非法操作。因此有了另外一种解决方案:Session。

Session会话是一种存储在服务器中的数据结构,用于存储和维护用户的状态信息。 每个用户登录后,服务器会为其创建一个新会话,以维护其状态信息。每个会话都有一个唯一的sessionID,客户端不再收取由服务器经处理确认后发回的原始Cookie信息,而是接收并保存由服务器为客户端创建的会话sessionID(sessionID同样保存在响应报头的Set-Cookie字段中)。

在这里插入图片描述

这样一来,由于客户端与服务器之间传递的是sessionID而不是原始状态信息,虽然无法保证sessionID不被中间人盗取,但是便于服务器更好地控制和保护会话数据(如检测到登录状态异常,自动删除session,要求重新登录),中间人盗取了sessionID也没用。

在这里插入图片描述


ENDING…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux常用命令——cksum命令

在线Linux命令查询工具 cksum 检查文件的CRC是否正确 补充说明 cksum命令是检查文件的CRC是否正确,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行…

Postman的简单使用

Postman简介 官网 Postman是Google公司开发的一款功能强大的网页调试与发送HTTP请求,并能运行测试用例的Chrome插件 使用Postman进行简单接口测试 新建测试 → 选择请求方式 → 请求URL,下面用百度作为例子: 参考文档 [1] Postman使用教程…

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策)

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策) “面向未来改变游戏规则的——可持续能源与环境学域” ���专注于能源环…

Mysql视图特性用户管理

目录 一、视图基本使用 二、用户管理 2.1 用户 ①用户信息 ②创建用户 tips:(解决无法创建用户) ③删除用户 ④修改用户密码 2.2数据库的权限 ①给用户授权 ②回收权限 视图:视图是一种虚拟表。视图是基于一个或多个基础表中的数据所创建的一个查询结果…

OTA: Optimal Transport Assignment for Object Detection 论文和代码学习

OTA 原因步骤什么是最优传输策略标签分配的OT正标签分配负标签分配损失计算中心点距离保持稳定动态k的选取 整体流程代码使用 论文连接: 原因 1、全部按照一个策略如IOU来分配GT和Anchors不能得到全局最优,可能只能得到局部最优。 2、目前提出的ATSS和P…

16结构型模式-组合模式

我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景,更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 1 组合模式介绍 将对象组合成树形结构以表示整个部分的层次结构.组合模式可…

深度学习 anaconda 安装问题

配置anaconda 在官网下载匹配版本的anaconda(官网下载可能时间比较长),可以选择清华镜像。 安装过程默认即可,或者根据情况进行修改。 旧版本是可以在安装的时候勾选添加路径到环境变量中的,但是我安装的是2023.9月…

分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribb…

Linux搭建Redis环境

1. 基础环境 名称说明CentOS 7.6Linux操作系统版本redis-5.0.0.tar.gzRedis二进制安装包 2. 服务安装 服务端路径:usr/loacl/redis/redis-server客户端路径:usr/loacl/redis/redis-cli # 解压二进制包 [rootzhouwei resource]# tar -zxvf redis-5.0.…

MySQL3:MySQL中一条更新SQL是如何执行的?

MySQL3:MySQL中一条更新SQL是如何执行的? MySQL中一条更新SQL是如何执行的?1.Buffer Pool缓冲池2.Redo logredo log作用Redo log文件位置redo log为什么是2个? 3.Undo log4.更新过程5.InnoDB官网架构InnoDB架构-内存结构①Buffer …

java类的动态加载

java类的动态加载 java动态加载的机制: ClassLoader->SecureClassloader–>URLClassLoader–>AppClassLoader loadClass–>findClass(重写方法)–>defineClass(从字节码加载类) 初始化的时候会加载静态代码块 实例化的时候会加载构造代码块、无参构…

S32K324 UDS Bootloader开发-需求篇

文章目录 前言内存分配UDS诊断协议需求CAN ID及时间参数UDS诊断服务Bootloader诊断服务APP诊断服务 DID22服务的DID:2E服务的DID:Routine Control DID: 刷写流程预编程主编程后编程 总结 前言 之前做过一个STM32的UDS Bootloader,协议栈主要是NXP官网下…

单片机矩阵键盘

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是矩阵键盘?1.独立键盘2.矩阵键盘变化1变化2变化3 3. 通过变型,举一反三,就可以实现4*4的矩阵键盘扫描 二、使用步骤…

app开发者提升第四季度广告收入的方法

第四季度将迎来双十一、双十二、圣诞、元旦为主的电商购物季,这是一年中利用线上消费为全新年度和全新预算做好准备的最佳时机,从过往的变现成功案例中汇总了优化要点,帮助开发者在第四季度和未来一年获取更多广告收益。 https://www.shensh…

CSS - 常用属性和布局方式

目录 前言 一、常用属性 1.1、字体相关 1.2、文本相关 1.3、背景相关 1.3.1、背景颜色 1.3.2、背景图片 1.4、圆角边框 二、常用布局相关 2.1、display 2.2、盒子模型 2.2.1、基本概念 2.2.2、border 边框 2.2.3、padding 内边距 2.2.4、margin 外边距 2.3、弹…

sql server2014如何添加多个实例 | 以及如何删除多个实例中的单个实例

标题sql server2014如何添加多个实例 前提(已安装sql server2014 且已有默认实例MSSQLSERVER) 添加新的实例 其实就是根据安装步骤再安装一次(区别在过程中说明) 双击安装 选择“全新独立安装或添加现有功能” 然后下一步下一…

【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

文章目录 1. 版本选择2. 用脚手架快速生成微服务的pom.xml3. 创建一个父工程4. 代码地址 本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 1. 版本选择 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重…

小主机折腾记18

这个月冲动消费了小两千块钱…… 1.880g5twr 由于四根2400t的内存条没有用出去,我又把它们装回了惠普的800g5twr; 看到pdd有400块钱的9350K,于是想着给他上一个9350k 在参考了pdd、咸鱼以及淘宝的价格后,我发现400块钱的9350k都…

【JAVA学习笔记】41 - 接口

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/interface_ 一、快速入门 usb插槽就是现实中的接口。你可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的&#x…

Git基本概念与使用

一、Git基本概念 git,是一种分布式版本控制软件,与CVS、Subversion这类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。g…