【计算机网络】什么是http?

目录

前言

1. 什么是HTTP协议?

2. 为什么使用HTTP协议?

3. HTTP协议通信过程

4. 什么是url?

5. HTTP报文

5.1 请求报文

5.2 响应报文

6. HTTP请求方式

7. HTTP头部字段

8. HTTP状态码

 9. 连接管理

长连接与短连接

管线化连接


前言

在日常的Web项目练习中,我们会发现老师会让我们在打开服务器之后使用 http://localhost/...进行项目效果测试和预览,偶尔会有同学尝试使用 https://localhost/... 进行服务请求,但出现“无法访问”的情况,这是为什么呢?当时也没有学习“《计算机网络》”,对此一无所知,只知道https是通信安全的协议;现今,我们将对 http https 进行学习理解。

本栏其他文章:https的工作原理以及和http的区别


1. 什么是HTTP协议?

HTTP协议是 Hyper Test Transfer Protocol(超文本传输协议)的缩写


2. 为什么使用HTTP协议?

HTTP协议是用于服务器与客户端浏览器之间传输超文本数据(文字、图片、视频、音频)的应用层协议


3. HTTP协议通信过程

http协议通信过程步骤:

1. 用户发起一个请求时,浏览器会对服务器的 TCP 请求连接

2. 服务器与浏览器会按照 TCP 协议的三次握手,建立 TCP 连接

3. 浏览器按照 http 协议格式,创建请求数据包(http请求报文),然后将请求数据包发送给服务器

4. 服务器按照 http 协议格式,解析请求数据包,执行请求处理,调用相关业务的方法,产生相应数据,然后将响应数据封装成响应数据包(http 响应报文)并发送给浏览器

5. 浏览器按照 http 协议格式,对响应数据包进行解析,将响应数据显示到浏览器页面,为用户展示


4. 什么是url?

HTTP协议使用 url(Uniform Resource Locator,统一资源定位符)定位资源

格式:http://host[ ":" port ][abs_path]

示例:http://127.0.0.1:8080/index.html

  • http :表示要通过 http 协议定位网络资源
  • host :表示合法的 Internet Web 服务器或者 IP 地址
  • port:指定一个端口号,为空则使用缺省端口80
  • abs_path:指定请求资源的URI

URL(url) : URI(Uniform Resource Identifier,统一资源标识符)的子集,URL 在 URI 的基础上增加了定位能力 

URN:只是用来定义一个资源的名称,并不具备定位该资源的能力


5. HTTP报文

5.1 请求报文

浏览器通过URL发起一个请求时,会发送一个 http 请求报文给目标服务器,服务器会根据请求报文中携带的请求数据进行处理

5.2 响应报文

当服务器处理完请求后,会将响应数据放入 http 响应报文中返回给浏览器


6. HTTP请求方式

  • GET:获取资源

        用于使用给定的 URL 从给定服务器中检索信息,完成从指定资源中请求数据。只是检索数据,并不会对数据产生其他影响。

  • POST:提交数据增加资源

        用于将数据发送到服务器以创建增加资源。使用 post 方法,如果两个请求相同,后一个请求不会覆盖第一个请求,所以 post 用于增加资源。

  • HEAD:获取响应头

        与 GET 方法类似,但是不反悔响应报文内容主体部分,仅传输响应报头部分。主要用于确认 URL 的有效性以及资源更新的日期时间等。

  • PUT:修改资源

        用于修改资源,要求在请求报文的主体中包含数据内容,然后保存到请求 URL 指定位置。使用 put 方法,如果两个请求相同,后一个请求会覆盖第一个请求,所以 put 用于修改资源。

  • DELETE:删除资源

        用于删除指定的资源。

  • OPTIONS:查询支持的方法

        查询指定的 URL 能够支持的方法。会返回 Allow:GET,POST,HEAD,OPTIONS等请求方式内容。

-------------------------------------------------------------------------------------------------------------------------

GET 和 POST 的区别

  • GET 用于获取资源,POST 用于提交数据。
  • GET 和 POST 的请求报文格式不同。
  • GET 使用请求报文中的首部字段 URL 传递请求参数,POST 使用 Request Body 提交数据。
  • GET 是幂等且可缓存,POST 非幂等且不可缓存;

        [幂等]:意思是多次执行相同的操作,结果都是[相同]的。


7. HTTP头部字段

  • Host 字段:浏览器在发送请求时,用来指定服务器的域名;
  • Content-Length 字段:服务器在响应数据时,会通过 Content-Length 字段,表示本次响应数据的长度;
  • Connection 字段:Connection 字段用于浏览器要求服务器使用长连接,以便其他请求复用该连接;
  • Content-Type 字段:Content-Type 字段用于服务器响应时,告诉浏览器本次响应数据的内容类型;
  • Accept 字段:Accept 字段用于浏览器发送请求时,声明可以接受哪些响应数据格式;
  • Content-Encoding 字段:Content-Encoding  字段说明数据的压缩方法,表示服务器响应的数据使用的压缩格式;
  • Accept-Encoding 字段:客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法;

8. HTTP状态码

服务器返回的 响应报文 的第一行为状态行,包含了状态码以及描述信息,用来告诉客户端请求后的响应结果。

状态码代表具体含义常见状态码
1xx信息提示100、101
2xx成功,报文已经收到且被正确处理200、201、204
3xx重定向,资源位置发生变动,需要客户端重新发起请求301、302、304
4xx客户端错误,请求报文有误,服务器无法处理400、401、403、404、405
5xx 服务器错误,服务器在处理请求时内部发生了错误500、502、503、504

1xx 信息:属于提示信息

  • 100:客户端可以继续发送请求
  • 101:服务器已经理解并接受请求,正在切换协议

2xx 信息:服务器成功处理了客户端的请求

  • 200:请求成功
  • 201:已创建新资源
  • 204:请求成功,但没有返回任何内容
  • 206:请求成功,但响应返回的 body 数据不是资源的全部,而是其中的一部分

3xx 信息:客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源

  • 301:永久性重定向,请求的资源不存在,需改用新的 URL 再次访问
  • 302:临时性重定向,请求的资源还在,但暂时需要用另一个 URL 来访问
  • 304:客户端可以使用缓存的内容

4xx 信息:客户发送的报文有误,服务器无法处理

  • 400:请求无效
  • 401:未经授权
  • 403:权限不足
  • 404:请求的资源不存在
  • 405:请求方法不被允许

5xx 信息:客户端请求报文正确,但服务器处理时内部发生了错误,属于服务器端的错误码

  • 500:服务器内部错误
  • 502:网关错误
  • 503:服务器不可用
  • 504:网关超时

 9. 连接管理

长连接与短连接

HTTP 1.0 默认使用短连接,HTTP 1.1 默认使用长连接,也叫持久性连接。

  • 短连接:每次使用 HTTP 协议进行通信,都需要重新按照三次握手的方式建立一个独立的 TCP 连接,响应完毕后,通过四次挥手断开连接。循环往复,增加了通信的开销;
  • 长连接:只需要建立一次 TCP 连接就能进行多次 HTTP 通信,减少了 TCP 连接的重复建立和断开所造成的额外开销,减少了服务端的负载;

管线化连接

  • 通过长连接将多个 HTTP 请求整批提交,在传送过程中不需先等待服务端的回应。 

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

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

相关文章

smartmontools-5.43交叉编译Smartctl

嵌入式系统的sata盘经常故障,需要使用smatctl工具监控和诊断sata故障。 1. 从网上下载开源smartmontools-5.43包。 2. 修改makefile进行交叉编译。 由于软件包中已经包含Makefile.am,Makefile.in。直接运行 automake --add-missing 生成Makefile。 3.…

自动部署SSL证书到阿里云腾讯云CDN

项目地址:https://github.com/yxzlwz/ssl_update 项目简介 目前,自动申请和管理免费SSL证书的项目有很多,如个人正在使用的 acme.sh。然而在申请后,如果我们的需求不仅限于服务器本地的使用,证书的部署也是一件麻烦事…

Gin 框架中实现路由的几种方式介绍

本文将为您详细讲解 Gin 框架中实现路由的几种方式,并给出相应的简单例子。Gin 是一个高性能的 Web 框架,用于构建后端服务。在 Web 应用程序中,路由是一种将客户端请求映射到特定处理程序的方法。以下是几种常见的路由实现方式: …

JavaScript | 检测文档在垂直方向已滚动的像素值用pageYOffset在webstorm上显示弃用了,是否应该继续使用?还是用其他替代?

在学习JavaScript的时候,深入学习时会遇到一些实际案例需要检测文档在垂直方向已滚动的像素值。 例如,当前页面内容很多,我想要滚动鼠标滑轮或者拖拽滚动条来浏览网页下面的内容。这时候一动滚动条,一些绝对固定的盒子却想要随着…

python图形化编程turtle小乌龟

文章目录: 一:导入包(常用的) 二:布局 1.设置世界坐标系 2.窗体 3.画布屏幕screen 三:线条画笔海龟 1.运动 2.样式 3.外观 4.其他 四:颜色 五:文字 六:图…

【Kubernetes】k8s删除master节点后重新加入集群

目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上,创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群,检查业务…

Unity触发器的使用

1.首先建立两个静态精灵(并给其中一个物体添加"jj"标签) 2.添加触发器 3.给其中一个物体添加刚体组件(如果这里是静态的碰撞的时候将不会触发效果,如果另一个物体有刚体可以将它移除,或者将它的刚体属性设置…

c++pair的用法

pair简单来说就是可以存储两种类型数据的一个类&#xff0c;其内部是使用模板实现的&#xff0c;所以可以指定其内部的类型。 pair在#include <utility> pair的构造 pair<int, string> p1({ 1,"张三" });pair<int, string> p2;pair<int, str…

文件的基础

一、文件 什么是文件 文件流&#xff1a; 一、1、文件的相关操作 创建文件的三种方式&#xff1a; public class FileCreate {public static void main(String[] args) {}//方式1 new File(String pathname)Testpublic void create01() {String filePath "e:\\news1.…

Qt源码分析: QEventLoop实现原理

QEventLoop屏蔽了底层消息循环实现细节&#xff0c;向上提供了与平台无关的消息/事件循环。 本文拟对Windows系统下QEventLoop的实现原理予以分析。 注1&#xff1a;限于研究水平&#xff0c;分析难免不当&#xff0c;欢迎批评指正。 注2&#xff1a;文章内容会不定期更新。 …

C语言-memcpy(不重复地址拷贝 模拟实现)

memcpy&#xff08;不重复地址拷贝&#xff09; 语法格式 在C语言中&#xff0c;memcpy 是一个标准库函数&#xff0c;用于在内存之间复制数据。它的原型定义在 <string.h> 头文件中。memcpy 的语法格式如下&#xff1a; c void *memcpy(void *destination, const voi…

健身·健康行业Web3新尝试:MATCHI

随着区块链技术进入主流&#xff0c;web3 运动已经开始彻底改变互联网&#xff0c;改写从游戏到金融再到艺术的行业规则。现在&#xff0c;MATCHI的使命是颠覆健身行业。 MATCHI是全球首个基于Web3的在线舞蹈健身游戏和全球首个Web3舞蹈游戏的发起者&#xff0c;注册于新加坡&a…

K8s 集群高可用master节点ETCD挂掉如何恢复?

写在前面 很常见的集群运维场景&#xff0c;整理分享博文内容为 K8s 集群高可用 master 节点故障如何恢复的过程理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。——村上…

【JVM】(内存区域划分 为什么要划分 具体如何分 类加载机制 类加载基本流程 双亲委派模型 类加载器 垃圾回收机制(GC))

文章目录 内存区域划分为什么要划分具体如何分 类加载机制类加载基本流程双亲委派模型类加载器 垃圾回收机制&#xff08;GC&#xff09; 内存区域划分 为什么要划分 JVM启动的时候会申请到一整个很大的内存区域,JVM是一个应用程序,要从操作系统这里申请内存,JVM就需要根据,把…

【Leetcode-73.矩阵置零】

题目&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

如何写好Stable Diffusion的prompt

Stable Diffusion是一种强大的文本到图像生成模型&#xff0c;其效果在很大程度上取决于输入的提示词&#xff08;Prompt&#xff09;。以下是一些关于如何编写有效的Stable Diffusion Prompt的秘诀&#xff1a; 明确描述&#xff1a;尽量清晰地描述你想要的图像内容。使用具体…

Mysql8和Mysql5加锁规则的细微不同

前言 验证版本 分别为Mysql5.7.22和Mysql8.0.26 关于Mysql5.7.22的加锁规则请查看 MySQL行锁加锁规则之等值查询 和 MySQL行锁加锁规则之范围查询 两个版本的等值查询规则一样&#xff0c;区别在于范围查询的“向右匹配到第一个不符合记录” 的加锁规则&#xff0c;Mysql5.…

2024全新返佣商城分销商城理财商城系统源码 全开源PHP+VUE源码

2023全新返佣商城分销商城理财商城系统源码 全开源PHPVUE源码 程序安装环境要求&#xff1a; nginx1.16 php7.2 mysql5.6 程序全开源PHPVUE源码 有需要测试的老铁&#xff0c;拿去测试吧

Linux_基础指令(一)

目录 1、ls指令 1.1 ls -l 1.2 ls -a 1.3 ls -i 2、pwd指令 3、cd指令 3.1 路径的概念 3.1.1 绝对路径 3.1.2 相对路径 3.2 cd ~ 3.3 cd - 4、touch指令 5、mkdir指令 6、删除系列的指指令 6.1 rmdir 6.2 rm 7、man指令 8、cp指令 9、move指令 结…

【Java】十大排序

目录 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的序列&#xff0c;依次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。遍历…