Linux学习笔记——HTTP协议

news2024/12/23 14:29:04

文章目录

  • 前言
  • HTTP协议的概念
  • URL
    • urlencode和urldecode
  • HTTP协议格式
  • HTTP协议版本
  • HTTP协议请求方法
    • GET方法——获取资源
    • POST方法——获取资源
    • PUT方法——传输⽂件
    • PUT方法——获得报文首部
    • 在这里插入图片描述
    • DELETE方法——删除文件
    • OPTIONS方法——询问支持的方法
  • HTTP的状态码
  • HTTP常见Header
    • Cookie
    • Session
    • 在这里插入图片描述
    • Cookie和Session的区别

前言

应用层

   程序员写的一个个解决实际问题,基于Socket接口之上编写的具体逻辑,满足我们日常需求的网络程序,都是在应用层。这些工作都是与文本处理相关的,所以http协议一定具有大量的文本分析和协议处理。

协议
   协议是一种 “约定”,协议定义了在两个或多个通信实体之间交换的报文格式和次序,以及报文发送/报文接收或其他事件所采取的行动。Socket API的接口在读写数据时,常常都是按 “字符串” 的方式来发送接收的。实际的网络交流中,不能单单使用socket接口,我们想获取的资源在服务器上,服务器上的进程会读取该数据并以字节流的形式进行传输,使用"结构化的数据"通过网络发送给用户。只要保证,只要满足一端发送时构造的数据在另一端能够正确的进行解析这种约定即可,就是应用层协议。


HTTP协议的概念

   虽然应用层协议是我们程序猿自己定的,但实际上,已经有大佬们定义了一些现成的又非常好用的应用层协议,供我们直接参考使用,HTTP(超文本传输协议)就是其中之一。

   HTTP协议全称为HyperText Transfer Protocol,HTTP是无连接,无状态,并且工作在应用层的协议。无连接是因为http协议本身是没有维护连接信息的, http的数据会全部交给网络络协议栈传输层的TCP协议,而TCP是面向连接的,而TCP协议是可靠传输的,因此HTTP协议是可靠传输的。 无状态是因为HTTP协议自身不对请求和响应之间的通信状态进行保存,也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理。


URL

   平时我们俗称的 “网址” 其实就是说的 URL。域名等于IP,可以定位唯一的一台机器,端口可以定位该机器上提供服务的进程,web根目录后的路径可以通过该路径来标识唯一的文件,即客户想要访问的资源的路径。所以通过url就可以定位互联网上的唯一资源,url也称为统一资源定位符,在全球范围内,只要找到了ur就能访问该资源,基于这种超文本信息获取资源方式被称为万维网(www)。
在这里插入图片描述


urlencode和urldecode

    像 / ? : 等这样的字符,已经被url当做特殊意义理解了,因此这些字符不能随意出现。某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。

转义的规则如下:

  • 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位前面加上%,编码成%XY格式。
  • urlencode:将字符转换成为16进制。
  • urlecode:将16进制数据转换成字符。

在这里插入图片描述
    如图所示,“+” 被转义成了 “%2B”,urldecode就是urlencode的逆过程。


HTTP协议格式

HTTP请求格式
在这里插入图片描述
    HTTP 协议规定,HTTP请求从客户端发出,服务器端响应该请求并返回。换句话说,肯定是先从客户端开始建立通信的,并且服务器端在没有接收到请求之前不会发送响应。

格式:

  • 请求首行:方法 URI 协议版本。
  • 请求报头/Header:请求的key:value的属性行,冒号分割的键值对;每组属性之间使用\n分隔,遇到空行表示Header部分结束 。
  • 空行。
  • 请求正文/Body(可以没有):Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。

举例:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDTVcH6O-1681735856917)(C:\Users\11794\AppData\Roaming\Typora\typora-user-images\image-20230414173912759.png)]


HTTP响应的报文格式

在这里插入图片描述
格式:

  • 响应首行:协议版本 状态码 状态码解释。
  • 响应报头/Header :响应的key:value的属性行,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 。
  • 空行。
  • 响应正文/Body :例如视频、音频、html、图片等。

举例:在这里插入图片描述


HTTP协议版本

    HTTP/0.9 HTTP 于 1990 年问世。那时的 HTTP 并没有作为正式的标准被建立。 现在的 HTTP 其实含有 HTTP1.0 之前版本的意思,因此被称为 HTTP/0.9。HTTP/1.0 (常用),HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协议标准至今仍被广泛使用在服务器端。HTTP/1.1 1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本。当初的 标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本。HTTP/2.0(不常用)新 一代 HTTP/2.0 正在制订中,但要达到较高的使用覆盖率,仍需假以时日。


HTTP协议请求方法

在这里插入图片描述    平时上网的行为就是两种,一是从服务器拿下来资源,二是把数据提交到服务器,其中最常用的就是GET方法和POST方法。


GET方法——获取资源

    Get方法通过url传参吗,向服务器索要某些资源,指定的资源经服务器端解析后返回响应内容,当然也可在url中给服务器提交少量(因为url长度有限制)的数据。
在这里插入图片描述


POST方法——获取资源

    POST 的主要目的并不是获取响应的主体内容,而是给服务器提交某些数据,提交的数据在正文中。假设我们要在某个网页进行登录,使用POST请求就会将我们的账号,密码放在请求正文中进行提交。

在这里插入图片描述


PUT方法——传输⽂件

    PUT方法主要用来传输文件,在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。 但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此⼀般的 Web 网站不使用该方法。在这里插入图片描述


PUT方法——获得报文首部

    HEAD方法和GET方法一样,只是不返回报文主体部分,用来确认资源的有效性。HEAD方法是不需要服务端返回响应正文的,使用HEAD方法,服务器只会返回响应首行、响应报头、空行。

在这里插入图片描述

DELETE方法——删除文件

    DELETE方法用来删除文件,是与 PUT 相反。但是, HTTP/1.1 的 DELETE 方法本身和 PUT 方法⼀样不带验证机制,所以⼀般的 Web 网站也不使用 DELETE 方法。
在这里插入图片描述


OPTIONS方法——询问支持的方法

    OPTIONS方法用来查询针对请求URL指定的资源支持的方法。即客户端询问当前服务器都支持哪些方法。
在这里插入图片描述


HTTP的状态码

在这里插入图片描述
    最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)。

200(OK):
在这里插入图片描述
301(Moved Permanently) 永久性重定向:告诉服务器某一资源已被永久放在另一个URL中,以后访问需访问新的URL。
在这里插入图片描述
302(Found) 临时性重定向:客户端要请求的资源临时被放到新的服务器中,以后访问此资源还是访问这个旧服务器
在这里插入图片描述
404(Not Found)
在这里插入图片描述
403(Forbidden)
在这里插入图片描述


HTTP常见Header

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

Cookie

    http协议是无状态的,那浏览器是怎么用来保护用户登录并且维持用户登录状态,做到会话管理的呢?这就是Cookie的价值了。浏览器端第一次发送请求到服务器端,服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端,浏览器端再次访问服务器端时会携带服务器端创建的Cookie,服务器端通过Cookie中携带的数据区分不同的用户(cookie文件具有文件级的和内存级的,这与浏览器的设置有关)。客户端被认为植入木马病毒,找到了浏览器文件中的cookie文件,就盗取了你的信息,所以现如今的网络环境中,这种方案不建议采取了。在这里插入图片描述


Session

    主流的方案,服务端使用算法帮用户形成唯一的session id文件,在服务端保存用户的私密信息,给客户返回session id,客户端的cookie文件保存session id即可。但是其实黑客还是可以用相同的方法拿到你的session id,并且用你的身份进行访问服务端,这种情况避免不了,所以没有绝对的安全。

    浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端。浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象。服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookiename为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象value为SessionId不存(Session对象默认存活30分钟),返回1中重新去创建Session与特殊的CookievalueSessionId存在,返回session对象。

在这里插入图片描述

Cookie和Session的区别

  • cookie数据存放在客户的浏览器上,session数据放在服务器上。
  • cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE。
  • 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中。

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

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

相关文章

050:cesium加载mapbox卫星地图、mapbox地形地图

第050个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载mapbox卫星地图、mapbox地形地图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共79行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

【CE】图形化作弊教程通关手册(超真实的游戏体验)

▒ 目录 ▒🛫 导读需求开发环境1️⃣ 第一关翻译操作总结2️⃣ 第二关(代码共享)翻译操作验证3️⃣ 第三关翻译操作总结🛬 文章小结📖 参考资料🛫 导读 需求 除了Tutorial-x86_64.exe教程外,CE…

算法,离你并不遥远

算法,离你并不遥远引子什么是算法?为什么算法很重要?什么时候开始学算法?狭隘的算法定义算法从现在学起,从现在用起算法永不过时引子 今天又是搬砖摸鱼胡混的一天,在问答闲逛,看到了一个问答&a…

Linux多线程-2

“我是我境遇里的起步者。” -- 里尔克《布里格手记》 在上一节Linux多线程当中,我们讲述了Linux中线程的概念以及线程的控制内容。这一篇博客承接上次内容,我们来对线程安全进行阐述。 目录 1.线程安全 1.1互斥的实现 1.1.1互斥锁实现互斥 1.1.2互…

启动 Ethereum(上海) 主网全节点

问题描述 采用最新的geth版本之后,按照之前的方法启动geth主网节点会出现如下问题: Post-merge network, but no beacon client seen. Please launch one to follow the chain!问题原因 The above message is emitted when Geth is run without a conse…

PyTorch深度学习实战 | 神经网络的优化难题

即使我们可以利用反向传播来进行优化,但是训练过程中仍然会出现一系列的问题,比如鞍点、病态条件、梯度消失和梯度爆炸,对此我们首先提出了小批量随机梯度下降,并且基于批量随机梯度下降的不稳定的特点,继续对其做出方…

SpringBoot集成Dubbo启用gRPC协议

文章目录前言项目结构代码示例父工程api moduleservice module注意事项区别本文记录下SpringBoot集成Dubbo启用gRPC协议,以及与原生 gRPC 在代码编写过程中的区别。 下面还有投票,帮忙投个票👍 前言 Dubbo 在 2.7.5 版本开始支持原生 gRPC 协…

【软件测试】浅了解什么是软件测试及开发测试模型

目录 1.什么是软件测试? 2.什么是需求? 3.什么是测试用例 4.什么是软件错误(bug)? 5.开发模型和测试模型 5.1软件的生命周期 5.2瀑布模型 5.3螺旋模型 5.4软件测试V模型 5.5软件测试w模型 6.软件测试的生命周…

Redis第二十九讲 Redis集群发布订阅模式以及Redis集群事务

Redis集群状态下的发布订阅 在Redis的几个基本数据结构介绍中,有讲过List数据结构,可以使用List的阻塞特性实现订阅消费,关于Redis的底层数据结构可以参考我的这篇博客:Redis第六讲 Redis之List底层数据结构实现 底层数据结构基本操作可以看我的这篇博客,Redis第十五讲 R…

【从零到Offer】- 泛型

泛型是个啥 ​ Java 泛型是 JDK 5 中引入的一个新特性,其提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 ​ 通过将数据类型参数化&#xf…

用opencv+playwright过滑动验证码

目录 梳理思路 编写代码 总结与提高 在本节,我们将使用opencv和playwright这两个库通过QQ空间的滑动验证码。 梳理思路 1. 使用playwright打开浏览器,访问qq空间登录页面。 2. 点击密码登录。 3. 输入账号密码并点击登录。 4. 出现滑动验证码图片后…

大型语言模型综述,非常详细,格局打开!A Survey of Large Language Models

大型语言模型综述,非常详细,格局打开!A Survey of Large Language Models 返回论文和资料目录 论文地址 项目地址 1.导读 讲得通俗易懂,且格局拉满!基本覆盖了自ChatGPT以来的AI比较火的事件,还多次提到…

AI 模型首次有了国家标准!头部大厂参与编制,辐射 AMD

3月17日,国内首个面向人工智能生成式模型的国家标准正式公开,并向社会征求意见。 该标准全称为《信息技术神经网络表示与模型压缩第一部分:卷积神经网络》 (GB/T 42382.1-2023&a…

【Linux系统下安装JDK】

一,linux下载JDK最方便快捷的方式:yum 1,执行下方命令,查看可安装java版本。 yum -y list java*2,选择一个进行安装,带-devel的安装的是jdk,而不带-devel的安装的是jre 3,安装命令…

【springBoot篇1】概念、创建和运行

目录 一、什么是springBoot?为什么要学springBoot springBoot的优点:(5点) 优点1:快速集成框架 优点2:内置了Tomcat容器 优点3:快速部署项目 优点4:少配置,多注解 优点5:支持更…

机器学习中的公平性

文章目录机器学习公平性评估指标群体公平性指标个人公平性指标引起机器学习模型不公平的潜在因素提升机器学习模型公平性的措施机器学习公平性 定义: 机器学习公平性主要研究如何通过解决或缓解“不公平”来增加模型的公平性,以及如何确保模型的输出结果…

生信刷题之ROSALIND——Part 1

目录写在前面1、Counting DNA NucleotidesProblemSample DatasetSample OutputCodeOutput2、Transcribing DNA into RNAProblemSample DatasetSample OutputCodeOutput3、Complementing a Strand of DNAProblemSample DatasetSample OutputCodeOutput4、Rabbits and Recurrence…

Android操作系统介绍

目录 Android 名词 Android LOGO 体系架构 Android系统架构 Linux 内核 硬件抽象层(HAL) Android Runtime 原生C/C库 Java API框架 系统应用 应用组件 活动 (Activity) 服务 (Service ) 广播接收器 &…

BLOOM模型结构详解

《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》 论文地址: https://arxiv.org/pdf/2211.05100.pdf 代码地址: transformers库-modeling_bloom.py BigScience 官方提供的代码链接并没有找到完整的模型实现代码,只有提示说模型结构代码是在 Megatron 的…

JS 中深拷贝的几种爱恨情仇

页面开发中,经常会碰到需要对数据进行某些处理操作,又不想影响原先的数据,所会经常将数据进行拷贝,当然这里指的是深拷贝。 深拷贝和浅拷贝的区别? 深拷贝通通俗点来讲呢,其实就是不管当前要操作的数据层级…