《二》HTTP 请求报文和响应报文、请求方法、状态码

news2024/12/26 23:50:23

请求报文和响应报文:

请求报文:

客户端向服务器发送的请求信息,就叫做请求报文。
请添加图片描述

客户端发送一个 HTTP 请求到服务器,请求信息包含四部分:请求行、请求头、空行、请求体。

  1. 请求行:包含三部分,分别是请求方法、请求资源的路径、协议版本。
  2. 请求头:头信息,告诉服务器一些信息,在客户端和服务器处理时起至关重要作用的信息几乎都在这边。
  3. 空行:请求头和请求体之间有一个空行来做区分,即使没有请求体,空行也不能少。
  4. 请求体:请求要发送的内容,不一定有。

    GET 请求方法没有请求体,数据通过请求头携带。
    POST 请求方法有请求体,数据通过请求体携带。

GET 方式示例:

// 请求行:请求方法是 GET,请求资源的路径是 /0606/01.php,携带的参数是 username=Lee&age=28 ,所用的协议是 HTTP/1.1
GET  /0606/01.php?username=Lee&age=28  HTTP/1.1  
// 请求头:是一行一行的 key-value
Host: localhost
// 空行

POST 方式示例:

// 请求行:请求方法是 POST,请求资源的路径是 /0606/02.php ,所用的协议是 HTTP/1.1
POST  /0606/02.php  HTTP1.1  
// 请求头:Content-type 表明请求体的类型,Content-length 表明请求体的长度
Host: localhost
Content-type: application/x-www-form-urlencoded
Content-length: 19
// 空行

// 请求体
username=Lee&age=28

响应报文:

服务器返回的响应信息,就叫做响应报文。
请添加图片描述

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个 HTTP 的响应消息。响应信息包含四部分:响应行、响应头、空行、响应体。

  1. 响应行:包含三部分,分别是所用的协议版本、状态码、状态文字。
  2. 响应头:头信息,告诉客户端一些信息,在客户端和服务器处理时起至关重要作用的信息几乎都在这边。
  3. 空行:响应头和响应体之间有一个空行来做区分,即使没有请求体,空行也不能少。
  4. 响应体:响应要返回的内容,不一定有。
// 响应行:所用的协议是HTTP/1.1,状态码是200,状态文字是 OK
HTTP/1.1 200 OK
// 响应头
Date:Thu, 06 Jun 2021 12:39:02 GMT
Server: Apache/2.2.21 <Win32> PHP/5.38
X-Powered-By: PHP/5.38
Content-Length: 5
Content-Type: text/html
// 空行

// 响应体
hello

请求方法:

请求方法用来定义对于资源采取什么样的操作,有各自的语义。分别有:GET、POST、PUT、DELETE、HEAD、CONNECT、OPTIONS、TRACE、PATCH。

这些请求方法虽然有各自的语义,但并不是强制性的。
HTTP 里虽然规定了这些请求方法,但 Web 服务器未必全部支持。

  1. GET:请求服务器中的指定资源。
  2. HEAD:和 GET 基本一致,但是没有响应体。这一方法可以在不传输整个响应体的情况下,获取响应头中的元信息。

    例如:只想知道某个资源是否还存在,而不需要知道具体是什么内容,就可以使用 HEAD,因为此时只需要状态码 200 就可以知道资源仍然存在了。

  3. POST:将数据发送到服务器以创建资源。
  4. PUT:将数据发送到服务器以替换整个资源。
  5. PATCH:将数据发送到服务器以更新部分资源。
  6. DELETE:请求服务器删除指定资源。
  7. TRACE:回显服务器收到的请求,主要用于测试或诊断。

    例如:使用了代理访问 news.163.com,如果想要知道代理有没有偷偷修改我们的 HTTP 请求,就可以使用 TRACE 来测试,news.163.com 的服务器就会把最后收到的请求返回回来。

  8. OPTIONS:返回服务器针对指定资源所支持的 HTTP 请求方法。
  9. CONNECT:建立一个到目标资源的服务器的隧道,通常用在代理服务器上,网页开发很少用到 。

GET 和 POST 的区别:

  1. 语义不同:GET 请求用来获取数据;POST 请求用来创建数据。

  2. 发送数据不同:GET 请求在请求头中携带数据,请求的数据会附在 URL 地址中;POST 请求一般是在请求体中携带数据。

    GET 请求的数据会附在 URL 地址中,以 ? 分割 URL 和传输数据,多个参数用 & 连接。如果数据是英文字母/数字,原样发送,如果是空格,转换为 +,如果是中文/其他字符,则直接把字符串用 BASE64 加密。
    POST 请求也可以在请求头中通过 URL 携带数据,这不是 GET 请求专属的特性。

  3. 传输数据的大小:GET 请求能携带的数据量和 URL 地址的长度有关系,一般最多就几 K;POST 请求能携带的数据量理论上是无限的。但实际上还是有大小限制,但是会比 GET 请求大得多。

  4. 安全性不同:POST 请求的安全性要比 GET 请求的安全性高一点。GET 请求的数据会在地址栏中显示出来;而 POST 请求的数据,不会在地址栏显示出来。

    比如:通过 GET 提交数据,用户名和密码将明文出现在 URL 上,那么(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录都可以看到这些信息。
    但实际上 POST 请求也不安全,打开浏览器的控制台也可以直接看到提交的信息。

HTTP 状态码:

状态码是用来定义服务器响应情况的。 HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。

状态说明是用来描述状态码的。

HTTP 状态码分类:

  1. 1**:消息,服务器已收到请求,需要继续处理。
  2. 2**:成功,服务器成功收到并处理请求。
  3. 3**:重定向,服务器需要进一步的操作以完成请求。
  4. 4**:客户端错误,请求包含语法错误或无法完成请求。
  5. 5**:服务器错误,服务器在处理请求的过程中发生了错误。

常见的 HTTP 状态码:

  1. 200:请求成功。

  2. 301:永久移动,请求的资源已被永久的移动到新 URI。

  3. 302:临时移动,请求的资源已被临时的移动到新 URI。

    例如:通过 POST 方式提交表单数据到 05.php,但是 05.php 重定向了到 06.php,通过 301 和 302 会发生丢失数据的情况。下图可以看到,05.php 是 POST 请求,但是 06.php 变成了 GET 请求。
    在这里插入图片描述
    可以通过 307 状态码来解决。下图可以看到,05.php 和 06.php 都是 POST 请求。
    在这里插入图片描述

  4. 304:资源未被修改。

    浏览器通过此资源的标识符告诉服务器它有这个资源,且告诉服务器最后的修改时间,服务器对比资源的标识符和最后的修改时间,如果一致,说明没有更改过资源,就会返回 304。浏览器就可以从缓存中获取资源,减轻了服务器的传输压力。

  5. 307:重定向中保持原有的请求数据。

  6. 400:客户端请求的语法错误,服务器无法理解。

  7. 401:请求要求用户的身份认证。

  8. 403:服务器理解客户端的请求,但是拒绝执行。

  9. 404:无法找到资源。

  10. 500:服务器内部错误,无法完成请求。

  11. 503:由于超载或系统维护,服务器暂时的无法处理客户端的请求。

常见的 HTTP 状态说明:

  1. OK:表示服务器成功返回了页面。
  2. BadRequest:表示语法错误导致服务器不识别。
  3. Unauthorized:表示请求需要用户认证。
  4. Not Found:表示指定的 URL 在服务器上找不到。
  5. InternalServer Error:表示服务器遇到意外错误。
  6. Service Unavailable:表示由于服务器过载或维护导致无法完成请求。

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

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

相关文章

查看库文件是32位还是64位|查看lib是静态库还是导入库|判断是debug模式还是release模式

文章目录 dll位数查看lib位数查看查看lib库是静态库还是导入库dll库文件信息查看lib库文件内容查看dll库查看编译模式是debug还是release方法一方法二方法三 lib静态库查看编译模式是debug还是release方法一方法二 lib导入库查看编译模式是debug还是release查看Linux下的.a库&a…

ROS学习第十五节——常用API(C++)

由于时间问题&#xff0c;从这一节开始只记录C实现效果&#xff0c;加油 以下附上这一节调试用的程序 https://download.csdn.net/download/qq_45685327/87708069 1.初始化函数 void init(int &argc, char **argv, const std::string& name, uint32_t options 0); …

openEuler NFS+协议全新发布:实现NAS存储性能与可靠性倍增

4月21日&#xff0c;在openEuler Developer Day 2023上&#xff0c;openEuler发布NFS协议&#xff0c;实现单客户端访问NAS存储可靠性提升3倍、性能提升6倍&#xff0c;助力NAS存储全面满足新型生产核心场景下苛刻要求。 传统NFS面临挑战 网络文件系统&#xff08;NFS&#xf…

vue打包如何开启gzip压缩

文章目录 场景gzip压缩有两种方案&#xff1a;个人实践 场景 本人前端打包的js达到了6.9M,导致网站加载很慢&#xff0c;想了下可以用gzip的方式压缩&#xff0c;减少文件大小。 “前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c…

什么蓝牙耳机好?测评达人精选五款性价比高蓝牙耳机推荐

用蓝牙耳机听歌、刷视频、玩游戏已经成为趋势&#xff0c;有线耳机已经逐渐被取代&#xff0c;但蓝牙耳机价格跨度大&#xff0c;品牌和型号也非常多&#xff0c;究竟什么蓝牙耳机好&#xff1f;我作为测评员这几年已经体验过五十款蓝牙耳机&#xff0c;今天就来总结五款性价比…

模仿网易云音乐黑胶唱片的交互实现

今天在 .NET MAUI 中我们来实现这个交互效果&#xff0c;先来看看效果&#xff1a; 使用.NET MAU实现跨平台支持&#xff0c;本项目可运行于Android、iOS平台。 创建页面布局 项目模拟了网易云音乐的播放主界面&#xff0c;可播放本地音乐文件。使用MatoMusic.Core作为播放内…

ChatGLM ptuning predict(预测)为空值的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

html学习(布局方式(layout)、浮动(float)、定位(position)、弹性盒(flex))

布局方式(layout) 文档流 文档流&#xff08;normal flow&#xff09; 文档流通俗的讲&#xff0c;就是一个web页面中&#xff0c;每一个模块只能从上到下从左往右的方式排列在页面上。 将窗口自下而上分成一行一行&#xff0c;应在每行中按从左至右的依次排放元素&#xff0…

[ZJCTF 2019]EasyHeap-patchlibc-调试

1,三连 主要功能&#xff1a; 1、malloc申请chunk 2、修改chunk内容 3、free chunk 4、exit 堆题多看一个libc信息&#xff1a; 2,IDA分析 2.1、malloc申请chunk heaparray[i]&#xff1a;存放 chunk 的地址。read_input(heaparray[i], size)&#xff1a;向 chunk 写入 s…

亚马逊云科技宣布四大举措,全方位赋能创新成长企业

4月13日&#xff0c;以“加速创新&#xff0c;成就未来”为主题的亚马逊云科技创新成长中国行深圳论坛圆满举行。会上亚马逊云科技宣布&#xff0c;将围绕创新成长企业的三大业务需求——云上创新、出海拓展、业务加速&#xff0c;提供行业聚焦、技术支撑、伙伴扶持、人才培养四…

ENVI5.3 自动配准流程化工具(Image Registration Workflow)配准方法流程

ENVI5.3 自动配准流程化工具&#xff08;Image Registration Workflow&#xff09;配准方法流程。 打开 ENVI软件中的Image Registration Workflow工具&#xff0c;分辨打开参考图像和待校正的图像。 Base Image File是参考图像&#xff0c;参考图像的范围应比待校正图像的范围…

LaTeX论文自动化排版

本文介绍了一些论文写作的在线课程&#xff0c;方便读者朋友们自学&#xff0c;提高论文写作的能力。论文写作的在线课程非常多&#xff0c;读者朋友们也可以在网上自行搜索&#xff0c;选择适合自己的在线课程进行学习。如需要打开课程的网站&#xff0c;请复制课程的网址到浏…

威胁行为者针对云中的常见漏洞

Palo Alto Networks 已发布其第 42 单元云威胁报告的第 7 卷。该报告调查了 1300 多家组织。它分析了所有主要云服务提供商 (CSP) 的 210000 个云帐户、订阅和项目中的工作负载&#xff0c;为安全领导者和从业者提供了云安全的多方面视图。 云迁移的速度从 2021 年的 3700 亿…

Codeforces Round 867 (Div. 3) (E-G)

Problem - E - Codeforces &#xff08;1&#xff09;题目大意 给你一个字符串&#xff0c;问你让字符串每一对相对应位置都不同的最小操作数是多少&#xff1f;&#xff08;A[i]和A[n - i],A[i 1]和A[n - i - 1]&#xff09; &#xff08;2&#xff09;解题思路 1.首…

数据库基础篇 《16.变量、流程控制与游标》

数据库基础篇 《16.变量、流程控制与游标》 1. 变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为系统变量以及用户自定义变量。 1.1 系统变量 1…

深度学习入门:多层感知机实现异或门

文章目录 前言感知机2层感知机实现异或门总结参考文献&#xff1a; 前言 最近又开始看深度学习的内容了&#xff0c;好久不用忘得差不多了&#xff0c;先从最简单的感知机入手了&#xff0c;这里记录下用2层感知机实现异或门。 感知机 什么是感知机呢&#xff1f;这里粗浅的介…

初步了解c语言(三)

注&#xff1a;此篇文章仅限初步了解&#xff0c;本小白后续会持续进行详解。 目录&#xff1a; 函数数组数组的定义数组的下标 操作符常见关键字关键字static的使用修饰局部变量修饰全局变量修饰函数 关键字register的大概了解#define定义常量和宏结构体&#x1f49e;结尾 函数…

RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Long‘解决方法

问题出现的场景&#xff1a; 输入&#xff1a; import torch import torch.nn as nn atorch.randint(10,[3,4]) # atorch.DoubleTensor(a) # aa.double() print(a) layer_normnn.LayerNorm(4) layer_norm(a) 我就是想测试一下经过layernorm之后的输出会变成什么样 但是报错…

Pycharm中如何安装 OpenAI ——ChatGPT的python包?

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 Pycharm中如何安装 OpenAI ——ChatGPT的python包? 摘要背景安装1、安装前准备2、安装前提条件3、依赖库 最佳安装过程1、检查 VC2、看哪些依赖库未安装3、将未装模块写成 test02.b…

js 打开资源管理器(经典范例:纯前端选择并预览图片)

效果预览 完整代码范例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"width…