【强烈建议收藏:计算机网络面试专题:HTTP协议、HTTP请求报文和响应报文、HTTP请求报文常用字段、HTTP请求方法、HTTP响应码】

news2024/11/12 14:13:07

一.知识回顾

之前我们一起学习了HTTP1.0、HTTP1.1、HTTP2.0协议之前的区别、以及URL地址栏中输入网址到页面展示的全过程&&DNS域名解析的过程、HTTP协议基本概念以及通信过程、HTTPS基本概念、SSL加密原理、通信过程、中间人攻击问题、HTTP协议和HTTPS协议区别。接下来我们就来学习一下【强烈建议收藏:计算机网络面试专题:HTTP协议、HTTP请求报文和响应报文、HTTP请求报文常用字段、HTTP请求方法、HTTP响应码】,发车啦,嘟嘟嘟!

在这里插入图片描述

二.HTTP请求报文和响应报文

HTTP是面向文本的,其报文中的每一个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。

2.1 HTTP请求报文格式

HTTP请求报文主要由请求行、请求头部、请求正文三部分组成,如下图所示
在这里插入图片描述

2.1.1 请求行

请求行由三部分组成,分别为:请求方法、URL、协议版本。三者之间由空格分隔。

  1. 请求方法:包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的。
  2. URL:统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

    补充:什么是URI呢?
    URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。

  3. 协议版本:版本格式->HTTP/主版本号.次版本号,常用的有HTTP/1.0、HTTP/1.1、HTTP/2.0
HTTP请求报文中请求行中的请求方法相关补充:HTTP协议的方法都有哪些呢?
1. HTTP版本支持的方法

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

  1. HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
  2. HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
2. HTTP请求的方法
方法描述
GET请求指定的页面信息,并返回实体主体。
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求服务器删除指定的页面。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

2.1.2 请求头部

  1. 请求头部为HTTP请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔;
  2. 请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少

常见请求头如下:

请求头说明
Host接受请求的服务器地址,可以是IP:端口号,也可以是域名。请求报文头部主要用于指定被请求资源的Internet主机和端口号,发送请求时,这个字段是必需的
User-Agent告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。发送请求的应用程序名称,也就是浏览器名称
Connection指定与连接相关的属性,如Connection:Keep-Alive
Accept-Charset通知服务端可以发送的编码格式
Accept-Encoding通知服务端可以发送的数据压缩格式,gzip、deflate。浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
Accept-Language通知服务端可以发送的语言,浏览器申明自己接收的语言
Accept传输文件类型,text/html浏览器可以接受服务器回发的类型为 text/html,*/*代表浏览器可以处理所有类型(一般浏览器发给服务器都是发这个)
Cookie可以表示用户状态的信息
Upgrade-Insecure-Requests升级为HTTPS请求
Referer当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理
x-requested-with:XMLHttpRequestAjax异步请求
Rangebytes=0-5。指定第一个字节的位置和最后一个字节的位置。用于告诉服务器自己想取对象的哪部分。
Cache-Control浏览器缓存策略
对于请求头中几个重要的信息进行补充说明
1.Connection:决定HTTP连接(不是TCP连接)是否在当前事务完成后关闭。

Connection:keep-alive。当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Connection:close。代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
image.png

Keep-Alive:多次请求复用一个TCP连接。
Keep-Alive: timeout=5, max=1000

2.User-Agent:这个字段可以帮助统计客户端用了什么浏览器、操作系统等

image.png

3.Cookie:Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术

HTTP是无状态的:协议对于事务处理没有记忆能力,对同一个url请求没有上下文关系,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况

使用Cookie在服务器上记录用户信息:
Cookie:用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。
image.png

4. Cache-Control:默认为private,响应只能够作为私有的缓存,不能再用户间共享。
  1. Cache-Control:public。响应会被缓存,并且在多用户间共享。正常情况,如果要求HTTP认证,响应会自动设置为private。
  2. Cache-Control:must-revalidate。响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
  3. Cache-Control:no-cache。响应不会被缓存,而是实时向服务器端请求资源。
  4. Cache-Control:max-age。设置缓存最大的有效时间,但是这个参数定义的是时间大小,而不是确定的时间点。单位是秒。
  5. Cache-Control:no-store在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。

2.1.3 请求数据

  1. 请求这部分需要看请求的方法,如果是GET请求就没有请求正文。
  2. 查看某一个请求数据,如下步骤所示:
    进入浏览器,按下F12,打开浏览器的开发者工具查看某个HTTP请求的报文:
    在这里插入图片描述

2.2 HTTP响应报文格式

HTTP响应报文主要由状态行、响应头部、响应正文三部分组成,如下图所示
在这里插入图片描述

2.2.1 状态行

状态行由3部分组成,分别为:协议版本、状态码、状态码描述。三者之前由空格分隔。

  1. 协议版本:版本格式->HTTP/主版本号.次版本号,常用的有HTTP/1.0、HTTP/1.1、HTTP/2.0
  2. 状态码:状态代码为3位数字,第一个数字定义了响应的类别,且有五类。1xx:指示信息——表示请求已接收,继续处理;2xx:成功——表示请求已被成功接收、理解、接受;3xx:重定向——要完成请求必须进行更进一步的操作;4xx:客户端错误——请求有语法错误或请求无法实现;5xx:服务器端错误——服务器未能实现合法的请求
  3. 状态码描述:每个状态码都代表了不同的含义,表示不同的响应信息。

常用状态码如下:

状态码说明
200响应成功
301永久重定向,搜索引擎将删除源地址,保留重定向地址
302暂时重定向,重定向地址由响应头中的Location属性指定
304缓存文件并未过期,还可继续使用,无需再次从服务端获取
400客户端请求有语法错误,不能被服务器识别
403服务器接收到请求,但是拒绝提供服务(认证失败)
404请求资源不存在
500服务器内部错误
对于响应状态码的信息进行补充说明
1. 3xx状态码补充image.png
2. 4xx状态码补充image.png
2. 5xx状态码补充image.png

2.2.2 响应头部

  1. 请求头部类似,但是还为响应报文添加了一些附加信息;
  2. 常见响应头部如下:
响应头说明
Server服务器应用程序软件的名称和版本
Content-Type响应正文的类型(是图片还是二进制字符串)
Content-Length响应正文长度
Content-Charset响应正文使用的编码
Content-Encoding响应正文使用的数据压缩格式
Content-Language响应正文使用的语言
对于响应头部中几个重要的信息进行补充说明
1. Content-Type:请求的时候,告知服务端数据的媒体类(MediaType/MIME Type)。返回的时候告知客户端,数据的媒体类型。

image.png

2.2.3 响应正文

  1. 响应这部分也需要看响应的方法,如果是GET请求就没有响应正文。
  2. 查看某一个响应方式,如下步骤所示:
    进入浏览器,按下F12,打开浏览器的开发者工具查看某个HTTP响应的报文:
    在这里插入图片描述

三.总结

如果你看到这里啦,那必须要为你点赞了。在这里插入图片描述

  1. HTTP协议
  2. HTTP请求报文基本格式、HTTP请求报文常用字段、HTTP请求方法
  3. HTTP响应报文基本格式、HTTP响应报文常用字段、HTTP响应码

其实学习就是这样,鼓噪乏味,但知道了为什么学习,为什么努力后,好像一切就没有想象总那么糟了。

我是硕风和炜,我们下篇文章见哦。

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

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

相关文章

毕业设计 基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信

基于51单片机环境监测设计 光照 PM2.5粉尘 温湿度 2.4G无线通信1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 dht11温湿度检测电路设计2.3 NRF24L01无线通信电路设计3、部分代码展示3.1 NRF24L01初始化3.2 NRF24L01的SPI写时序3.…

H264基本原理

前言H264视频压缩算法现在无疑是所有视频压缩技术中使用最广泛,最流行的。随着 x264/openh264以及ffmpeg等开源库的推出,大多数使用者无需再对H264的细节做过多的研究,这大降低了人们使用H264的成本。但为了用好H264,我们还是要对…

决策树在sklearn中的实现

目录 一.模块sklearn.tree 二.建模基本流程 三.DecisionTreeClassifier重要参数 1.criterion 2.random_state & splitter 3.剪枝参数max_depth 4.剪枝参数min_samples_leaf & min_samples_split 5.max_features & min_impurity_decrease 6.class_weight …

Java奠基】掌握Java基础知识

目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式,字面量的分类如下: 字面量类型说明举例整数类型不带小数点的数字12,25小数类型带小数点的数字3.14,-5,20…

【设计模式】7.适配器模式

概述 如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供…

易基因|独家分享:高通量测序后的下游实验验证方法——DNA甲基化篇

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。此前,我们分享了DNA甲基化研究的测序数据挖掘思路(点击查看详情),进而鉴定出研究的目的基因或目标区域的DNA甲基化。做完测序后,…

华为OD机试题,用 Java 解【租车骑绿岛】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

电商(强一致性系统)的场景设计

领域拆分:如何合理地拆分系统? 一般来说,强一致性的系统都会牵扯到“锁争抢”等技术点,有较大的性能瓶颈,而电商时常做秒杀活动,这对系统的要求更高。业内在对电商系统做改造时,通常会从三个方面…

OM | 具有弹性需求的广义随机共乘(拼车)用户均衡问题

编者按: 通过扩展确定性共乘用户均衡问题,提出了具有弹性需求的广义随机共乘用户均衡问题,用于具有共乘出行活动的城市交通网络分析。 1、引言​ 共乘(ridesharing), 即生活中的“拼车”、“顺风车”&am…

华为OD机试题,用 Java 解【斗地主】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

巧用 ChatGPT,让开发者的学习和工作更轻松

引言 随着人工智能技术的快速发展和广泛应用,ChatGPT 作为一种新兴的自然语言处理模型,近期备受瞩目,引发了广泛讨论。 ChatGPT 具有多种应用场景,既可以用作聊天机器人,实现智能问答和自然语言交互,也可…

2.27自动化测试

第零步 根据脑图写测试用例第一步.创建共同类防止每次进行测试不同界面的时候都重新创建驱动浪费时间注意要用static 否则后续无法直接使用getdriver方法第二步 对登录界面写测试用例先在test下创建一个登录类.每个界面用不同的类,防止混在一起并让其继承common包下的commonDri…

让马斯克反悔的毫米波雷达,被国产雷达头部厂商木牛科技迭代到了5D时代

近日,特斯拉或将在其HW4.0硬件系统配置一枚高精度4D毫米波雷达的消息在外网刷屏。据分析,“纯视觉”信仰者马斯克之所以做出这样的决定,一方面是减配了雷达的特斯拉自动驾驶,表现不尽如人意;另一方面也跟毫米波雷达的技…

第13天-仓储服务(仓库管理,采购管理 ,SPU规格维护)

1.仓储服务开发配置 1.1.加入到Nacos注册中心 spring:application:name: gmall-warecloud:nacos:discovery:server-addr: 192.168.139.10:8848namespace: 36854647-e68c-409b-9233-708a2d41702c1.2.配置网关路由 spring:cloud:gateway:routes:- id: ware_routeuri: lb://gmal…

CDH 6.3.2启用YARN高可用

升级原因 CDH平台即将被切换成生产环境,而生产环境几乎都是HA,所以需要将YARN升级成HA。 升级准备 CDH已经成功安装并正常使用CMS的管理员账号正常登陆 CDH启用YARN HA 登陆CMS系统->选择YARN服务->点击进入到YARN服务详情页面,再…

【Yolov5】保姆级别源码讲解之-模型训练部分train.py文件

本次讲解yolov5训练类train.py1.主函数2.main函数2.1 第一部分 进行校验2.2 第二部分 配置resume参数用于中断之后进行训练2.3第三部分 DDP mode2.4 第四部分3.训练结果1.主函数 opt参数部分和main方法 weights:权重文件路径 – cfg:存储模型结构的配置…

解决AAC音频编码时间戳的计算问题

1.主题音频是流式数据,并不像视频一样有P帧和B帧的概念。就像砌墙一样,咔咔往上摞就行了。一般来说,AAC编码中生成文件这一步,如果使用的是OutputStream流写入文件的话,就完全不需要计算时间。但在音视频同步或者使用A…

pytorch入门3--线性回归以及许多python,pytorch函数的用法

先补充一些知识点,这里不一定用得到,后面的学习过程中可能用得到。 1.batch表示批量,就是一批数据集的意思; 2.batch_size表示数据集(样本集、训练集)的大小(数据的个数)&#xff1b…

进程与线程的区别

进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程 进程中的一个执行任务(控制单元)&#xf…

深入理解跳表及其在Redis中的应用

前言跳表可以达到和红黑树一样的时间复杂度 O(logN),且实现简单,Redis 中的有序集合对象的底层数据结构就使用了跳表。其作者威廉普评价:跳跃链表是在很多应用中有可能替代平衡树的一种数据结构。本篇文章将对跳表的实现及在Redis中的应用进行…