第一章 HTTP

news/2024/9/22 17:37:39 标签: 网络

目录

一、HTTP简介

1.1. 概述

1.2. HTTP与TCP的区别

 二、HTTP迭代版本

三、HTTP请求头

四、HTTP响应

五、请求头中的请求方式


一、HTTP简介

1.1. 概述

        超文本传输协议(Hypertext Transfer Protocol,HTTP),用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源。其位于TCP/IP模型的应用层,依赖于TCP提供的可靠数据传输服务。是一个无状态的简单的请求-响应协议,每次请求和响应后不保留任何状态。HTTP定义了数据的格式,如客户端请求和服务端响应头、URL结构、编码格式等。

1.2. HTTP与TCP的区别

HTTP

TCP

定义

以TCP为基础,用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源

负责在网络上可靠地传输数据。

TCP/IP模型层次

应用层,定义Web通信的规则

传输层,提供底层的数据传输服务

连接方式

无状态的连接,每次请求和响应之后不保留任何状态。

有状态的长连接,面向连接的协议,通过三次握手建立连接

数据传输方式

定义了数据的格式,如请求和响应头、URL结构和编码方式等

提供字节流服务,保证数据传输的顺序和可靠型

应用场景

用于在客户端和服务端之间传输超文本文档(视频、图片、位置数据等)和其他资源

支持各种不同的应用,包括但不限于Web通信

备注

Http协议是建立在TCP协议基础之上的。当浏览器需要从服务器 获取网页数据的时候,会发出一次http请求。Http通过TCP建立起一个到服务器的通道。 当一个网页完成之后,客户端和服务器端之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个页面时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件中设定这个时间

 二、HTTP迭代版本

  • HTTP 0.9

  • 简单请求方法,仅限于文字传输的无序协议

  • HTTP 1.0

  • 支持0.9版本的简单请求方法和包含客户端HTTP版本的完整GET请求。面向事务的应用层协议,广泛应用于Web浏览器和服务器。

  • HTTP 1.1

  • 双方规定了连接方式和连接类型,但并没有过多考虑到通信连接的速率和效率。

  • HTTP 2.0

  • HTTP2.0的前身是HTTP1.0和HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范十分庞大。网络协议新版本并不会马上取代旧版本。实际上,HTTP 1.0和HTTP1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。

  • HTTP 3.0

  • 与之前依赖于成熟的TCP的版本不同,HTTP3.0使用QUIC,一种基于UDP的多路传输协议。HTTP3.0具有更低的延迟和更快的加载速度。

  • 三、HTTP请求头

客户端——>请求——>服务端

HTTP协议的一部分,用于在客户端和服务端之间传递附加信息(包含了请求、客户端环境或请求的上下文等信息)

accept: application/json, text/javascript, */*; q=0.01 浏览器可接受的MIME类型

accept-encoding: gzip, deflate, br, zstd 浏览器能够进行解码的数据编码方式

accept-language: zh-CN,zh;q=0.9 浏览器希望的语言类型

cookie: PHPSESSID=bdq4ccqp17svf9dp87onjaov2n; 最重要的请求头之一

Request URL: https://blog.51cto.com/blog/user-stat?id=5342541 请求的资源地址

Request Method: GET 请求方法

Status Code: 200 OK 服务端响应请求的状态

Remote Address: 183.131.117.207:443 请求的服务IP地址

Referrer Policy: no-referrer-when-downgrade

四、HTTP响应

服务端——响应——客户端

指定了客户端请求服务端获得什么样的响应

cache-control: must-revalidate, no-cache, no-store 缓存控制

content-encoding: gzip 响应内容编码格式

content-type: application/json; charset=UTF-8 响应内容类型

date: Fri, 06 Sep 2024 05:45:38 GMT 响应时间

eo-cache-status: MISS

eo-log-uuid: 17962474739074623387

expires: Thu, 19 Nov 1981 08:52:00 GMT

load-balancing: blog

origin-agent-cluster: ?0

五、请求头中的请求方式

GET:请求指定的资源,多次执行相同的GET请求应该确保幂等/产生相同的结果。

POST:向指定的资源提交数据,以便根据所提供的数据创建/更新资源。POST请求不是幂等的,每次执行相同的POST请求可能会产生不同的结果。

PUT:此方法用于完整地更新指定的资源。由于PUT请求是幂等的,多次执行相同的PUT请求应该产生相同的结果。

DELETE:此方法用于删除指定的资源。

HEAD:此方法与GET方法类似,只是服务器在响应中只返回HTTP头部,而不返回实际的数据。这用于检查资源的元数据。

OPTIONS:此方法用于获取指定的资源所支持的通信选项。这可以用于CORS(跨源资源共享)检查。

PATCH:此方法用于对资源进行部分更新。

六、响应状态码

  1. 信息响应(100-199)
  2. 成功响应(200-299)
  3. 重定向(300-399)
  4. 客户端错误(400-499)
  5. 服务器错误(500-599)

状态码

信息

具体描述

200

OK

请求已成功,并且返回了请求的资源。

204

No Content

请求已成功处理,但没有内容返回。

206

Partial Content

服务器已经完成了部分GET请求。

301

Moved Permanently

请求的资源已被永久移动到新的URL。

302

Found

请求的资源临时移动到新的URL。

304

Not Modified

自上次请求后,请求的资源未修改过。

400

Bad Request

服务器无法处理请求,因为客户端的请求语法错误。

401

Unauthorized

请求需要用户验证。

403

Forbidden

服务器拒绝请求。

404

Not Found

服务器无法找到请求的资源。

500

Internal Server Error

服务器遇到了意料之外的情况,导致它无法完成请求。

503

Service Unavailable

服务器暂时无法处理请求,可能是因为过载或维护。


http://www.niftyadmin.cn/n/5670666.html

相关文章

【2022工业图像异常检测文献】PatchCore

Towards Total Recall in Industrial Anomaly Detection 1、Background 工业图像异常检测主要解决 冷启动问题 ,即仅使用正常(无缺陷)样本图像来训练模型。 现有的关于冷启动工业视觉异常检测的工作依赖于通过自编码方法、生成对抗网络或其…

Linux操作系统:GCC(GNU Compiler Collection)编译器

在 Linux 系统中,gcc(GNU Compiler Collection)是一个非常强大的编译器,主要用于编译 C 语言程序。 除了基本的编译和链接命令外,gcc还提供了许多选项和功能。 以下是一些常用的 gcc命令及其功能: 1. 基本…

Java设计模式(单例模式)——单例模式存在的问题(完整详解,附有代码+案例)

文章目录 4.3 单例模式存在的问题4.3.1序列化反序列化破环单例模式4.3.2 反射破环单例模式 4.3 单例模式存在的问题 破坏单例模式: 使上面定义的单例类(Singleton)可以创建多个对象,枚举方式除外。有两种方式,分别是…

【LandSat卫星】LandSat系列卫星介绍,文末附下载方式。

【LandSat卫星】LandSat系列卫星介绍,文末附下载方式。 【LandSat卫星】LandSat系列卫星介绍,文末附下载方式。 文章目录 【LandSat卫星】LandSat系列卫星介绍,文末附下载方式。前言LandSat系列卫星1.Landsat 12.Landsat 23.Landsat 34.Land…

Go并发编程的高级技巧——请求复制与限流

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在一些高性能应用场景中,快速响应是非常重要的目标。例如,当一个应用需要快速响应用户的HTTP请求,或从多个副本中检索数据时,如何优化请求处理成为关键。本文将讨论如何在Go语言中,通过并发和限流机制来实现…

Stream练习

取偶数 package stream;import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors;public class StreamDemo2 {public static void main(String[] args) {ArrayList<Integer> list new ArrayList<>…

python:给1个整数,你怎么判断是否等于2的幂次方?

最近在csdn上刷到一个比较简单的题目&#xff0c;题目要求不使用循环和递归来实现检查1个整数是否等于2的幂次方&#xff0c;题目如下&#xff1a; 题目的答案如下&#xff1a; def isPowerofTwo(n):z bin(n)[2:]print(bin(n))if z[0] ! 1:return Falsefor i in z[1:]:if i !…

大学生必看!60万人在用的GPT4o大学数学智能体有多牛

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1…