【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

news2024/9/21 20:28:21

目录

URL格式

HTTP请求和响应报文的字段?

HTTP请求方法

常见的状态码

GET 和 POST 的区别

Cookie 和 Session


URL格式

:是用来分割URL的主体部分(通常是路径)和查询字符串(query string)查询字符串是一组键值对的参数

query string:是键值对的结构,&分割键值对,=分割键和值

HTTP请求和响应报文的字段?

Content-Type: 数据类型(text/html等)。

Content-Length: 正文的长度。

Host: 客户端告知服务器,所请求的资源是在哪个主机的哪个端口上。

User-Agent: 声明用户的操作系统和浏览器的版本信息。

Referer: 当前页面是哪个页面跳转过来的。

Location: 搭配3XX状态码使用,告诉客户端接下来要去哪里访问。

Cookie: 用于在客户端存储少量信息,通常用于实现会话(session)的功能。

Connection 字段 ---> 长连接

HTTP/1.1 版本的默认连接都是长连接,但为了兼容老版本的 HTTP,需要指定 Connection 首部字段的值为 Keep-Alive。

开启了 HTTP Keep-Alive 机制后, 连接就不会中断,而是保持连接。当客户端发送另一个请求时,它会使用同一个连接,一直持续到客户端或服务器端提出断开连接。

Content-Encoding 字段

Content-Encoding 字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式

Content-Encoding: gzip

HTTP请求方法

GET:用于从服务器获取资源,通常是通过URL传递参数来请求资源。GET请求是幂等的,即多次请求相同资源不会产生不同的结果。

POST:用于向服务器提交数据,通常用于创建新资源或在服务器上执行某些操作。POST请求不幂等,多次提交相同的数据可能会产生不同的结果。

HEAD:类似于GET请求,但只返回资源的头部信息,不返回实际的数据。通常用于检查资源是否存在或获取资源的元数据。

PUT:用于更新或创建指定的资源,通常将请求的数据放在请求体中,以覆盖服务器上的现有资源或创建新资源。

DELETE:用于删除指定的资源。DELETE请求用于删除服务器上的资源。

OPTIONS:用于获取目标资源支持的通信选项。客户端可以使用OPTIONS请求来查询服务器支持的请求方法、头部信息等。

PATCH:用于部分更新资源,通常将请求的数据放在请求体中,只更新资源的一部分而不是整个资源。

TRACE:用于追踪请求在传输过程中的轨迹,通常用于诊断和调试。

CONNECT:通常用于建立与代理服务器的网络连接,以便进行加密通信(如HTTPS)或隧道传输。

常见的状态码

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

  • 200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
  • 204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
  • 206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向

  • 301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
  • 302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

  • 304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

  • 400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。
  • 401 Unauthorized」:表示需要身份验证,客户端未提供有效的凭据。
  • 403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。
  • 404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

  • 500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。
  • 501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。
  • 502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
  • 503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思。

GET 和 POST 的区别

RFC代表"Request for Comments",它是一种用于制定和描述互联网标准、协议和相关信息的文档系列。RFC文档是由互联网工程任务组和其他互联网相关组织发布的,用于记录互联网的技术规范和协议。

根据 RFC 规范,GET 的语义是从服务器获取指定的资源。GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,以?分割URL和传输数据,参数之间以&相连

根据 RFC 规范,POST 的语义是根据请求负荷(报文body)对指定的资源做出处理(POST方法一般用于将数据上传给服务器)。POST 请求携带数据的位置一般是写在报文 body 中

先说明下安全和幂等的概念:

  • 在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。
  • 所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的。

如果从 RFC 规范定义的语义来看:

  • GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求)
  • POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求的数据做缓存

上面是从 RFC 规范定义的语义来分析的。

但是实际过程中,开发者不一定会按照规范定义的语义来实现 GET 和 POST 方法。比如:

  • 可以用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法自然就不是安全和幂等。
  • 可以用 POST 方法实现查询数据的请求,这样实现的 POST 方法自然就是安全和幂等。

如果「安全」放入概念是指信息是否会被泄漏的话,虽然 POST 用 body 传输数据,而 GET 用 URL 传输,这样数据会在浏览器地址拦容易看到,但是并不能说 GET 不如 POST 安全的

虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。

GET和POST没有本质区别,使用GET实现的场景基本上也可以使用POST,使用POST实现的场景基本上也可以使用GET

Cookie 和 Session

Cookie和Session是用于在Web应用中维护用户状态和跟踪用户会话的两种常见方式

Cookie

  • cookie是请求头中的一个重要字段,在服务器返回的响应报文中,可以在响应header中包含一个或多个Set-Cookie这样的资源,浏览器看到这些Set-Cookie就会把这样的数据保存在浏览器本地。
  • Cookie典型的应用场景,在客户端维持登陆状态。在某个网站上登陆成功之后,浏览器就会记住当前登录用户的身份信息,然后在接下来的访问网站的其他页面,服务器也能知道是谁在登录。
  • Cookie是存储在客户端(通常是浏览器)中的小型文本文件(一般<=4KB)。服务器将Cookie发送给客户端并存储在客户端的本地文件中,以便在后续HTTP请求中将Cookie发送回服务器。
  • Cookie通常用于存储少量简单的文本数据,例如用户偏好设置或用于跟踪用户的身份验证令牌。

Cookie不是缓存,是持久化存储数据的手段,浏览器自动帮你存储,这个存储是保存到硬盘上的;而缓存的数据不一定是持久化的(也可以在内存里缓存);缓存的数据是用来提高访问速度的!

  • Cookie数据存储在客户端的浏览器中,因此可能容易受到客户端篡改或窃取的风险。
  • 由于每个HTTP请求都会包含任何相关Cookie数据,因此可能会增加网络流量和加载时间

Session

  • 服务器同一时刻收到的请求有很多,服务器需要清楚的区分每个请求属于哪个客户端,就需要先在服务器这里记录每个用户的身份标识和所对应的用户信息。就有了session!sessionId是由服务器生成的一个唯一性字符串;
  • Session数据通常存储在服务器上。服务器为每个客户端会话创建一个唯一的标识符(通常是会话ID,sessionID),并使用该标识符来跟踪和管理与特定用户相关的数据。

会话的本质就是一个哈希表,存储着一些键值对。其中key就是身份标识(sessionId),value就是用户信息(session)。

  • Session用于存储更敏感和持久的数据,例如用户身份验证信息。Session通常用于存储更大、更复杂的数据,如用户登录状态、购物车内容等。
  • Session数据存储在服务器上,客户端无法直接访问或修改Session数据,因此通常比Cookie更安全。但服务器端的安全性也非常重要,以防止会话劫持等攻击。
  • Session数据存储在服务器上,不会在每个请求中传输,因此不会对网络性能产生太大影响。

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

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

相关文章

MyBatisPlus(九)模糊查询

说明 模糊查询&#xff0c;对应SQL语句中的 like 语句&#xff0c;模糊匹配“要查询的内容”。 like /*** 查询用户列表&#xff0c; 查询条件&#xff1a;姓名包含 "J"*/Testvoid like() {String name "J";LambdaQueryWrapper<User> wrapper ne…

十天学完基础数据结构-第六天(树(Tree))

树的基本概念 树是一种层次性的数据结构&#xff0c;它由节点组成&#xff0c;这些节点按照层次关系相互连接。树具有以下基本概念&#xff1a; 根节点&#xff1a;树的顶部节点&#xff0c;没有父节点。 子节点&#xff1a;树中每个节点可以有零个或多个子节点。 叶节点&am…

力扣第102题 广度优先搜索 二叉数 c++

题目 102. 二叉树的层序遍历 中等 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20…

八大排序算法汇总(C语言实现)

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…

【1++的刷题系列】之双指针

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的刷题系列】 文章目录 一&#xff0c;什么是双指针二&#xff0c;相关例题例一例二例三例四例五 一&#xff0c;什么是双指针 常见的双指针有两种形式&#xff1a;一种是对撞指针&#xff08…

tinymce富文本编辑器【tip】

项目场景&#xff1a; tinymce富文本编辑器在iview的modal框中显示的问题 问题描述 最近在使用tinymceiviewvue写项目&#xff0c;在富文本编辑器配合弹框一起使用时&#xff0c;总是存在问题&#xff1a;弹框弹出的时候&#xff0c;富文本编辑器不能点击&#xff0c;鼠标的光…

【软考】PV 操作

#国庆发生的那些事儿# 临界资源: 诸进程间需要互斥方式对其进行共享的资源&#xff0c;如打印机、磁带机等临界区: 每个进程中访问临界资源的那段代码称为临界区信号量: 是一种特殊的变量。 信号量的值与相应资源的使用情况有关: ①: 当信号量的值大于0时&#xff0c;表示当…

Lucene学习总结之Lucene的索引文件格式

四、具体格式 上面曾经交代过&#xff0c;Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息&#xff0c;也包括了从Term到Document映射的反向信息&#xff0c;还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。 4.1. 正向信息 Index –> Seg…

Spring 体系架构模块和三大核心组件介绍

Spring架构图 模块介绍 1. Spring Core&#xff08;核心容器&#xff09;&#xff1a;提供了IOC,DI,Bean配置装载创建的核心实现。 spring-core &#xff1a;IOC和DI的基本实现 spring-beans&#xff1a;BeanFactory和Bean的装配管理(BeanFactory) spring-context&#xff1…

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起&#xff0c;看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重&#xff0c;并生成与人对齐的模型。请记住&#xff0c;您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先&#xff0c;您将从提示数据集…

<C++> 模板-上

目录 前言 一、函数模板 1. 概念 2. 格式 3. 原理 4. 函数模板的实例化 4.1 隐式实例化 4.2 显示实例化 5. 模板参数的匹配原则 5.1 5.2 5.3 二、类模板 1. 类模板定义格式 2. 类模板的实例化 总结 前言 如何实现一个通用的函数&#xff0c;函数可以实现两个类型的交换&…

C++_pen_友元

友元&#xff08;破坏封装&#xff09; 我故意让别人能使用我的私有成员 友元类 friend class B;友元函数 friend void func();友元成员函数 friend void A::func();例 #include <stdio.h>class A;class C{ public:void CprintA(A &c); };class B{ public:void Bpri…

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具&#xff0c;但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节&#xff0c;但是目…

c与c++中的字符串

在c中&#xff0c;string本质上是一个类&#xff1b; string与char *有些区别&#xff1a; char*是一个指针&#xff1b;string是一个类&#xff0c;类内封装了char*&#xff0c;管理这一个字符串&#xff0c;是一个char*的容器 在使用string类型时&#xff0c;要加上其头文…

用向量数据库Milvus Cloud 搭建AI聊天机器人

加入大语言模型(LLM) 接着,需要在聊天机器人中加入 LLM。这样,用户就可以和聊天机器人开展对话了。本示例中,我们将使用 OpenAI ChatGPT 背后的模型服务:GPT-3.5。 聊天记录 为了使 LLM 回答更准确,我们需要存储用户和机器人的聊天记录,并在查询时调用这些记录,可以用…

新版校园跑腿独立版小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务

最新校园跑腿小程序源码 多校版本&#xff0c;多模块&#xff0c;适合跑腿&#xff0c;外卖&#xff0c;表白&#xff0c;二手&#xff0c;快递等校园服务 此版本为独立版本&#xff0c;不需要** 直接放入就可以 需要自己准备好后台的服务器&#xff0c;已认证的小程序&#xf…

mysql面试题17:MySQL引擎InnoDB与MyISAM的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL引擎InnoDB与MyISAM的区别 InnoDB和MyISAM是MySQL中两种常见的存储引擎,它们在功能和性能方面有一些区别。下面将详细介绍它们之间的差异。…

【微信小程序开发】一文学会使用CSS控制样式布局与美化

引言 在微信小程序开发中&#xff0c;CSS样式布局和美化是非常重要的一部分&#xff0c;它能够为小程序增添美感&#xff0c;提升用户体验。本文将介绍如何学习使用CSS进行样式布局和美化&#xff0c;同时给出代码示例&#xff0c;帮助开发者更好地掌握这一技巧。 一、CSS样式布…

基于HSV空间的彩色图像分割技术

1. 引言 每当我们看到图像时&#xff0c;它通常都是由各种元素和目标组成的。在某些情况下&#xff0c;我们可能会想要从图像中提取某个特定的对象&#xff0c;大家会怎么做&#xff1f;首先我们会想到的是进行crop相关的操作&#xff0c;这在某种程度上是可行的&#xff0c;但…

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型

《数字图像处理-OpenCV/Python》连载&#xff08;10&#xff09;图像属性与数据类型 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第2章 图像的数据格式 在P…