HTTP协议

HTTP协议专门用于定义浏览器与服务器之间交互数据的过程以及数据本身的格式

HTTP概述

HTTP是一种客户端(用户)请求和服务器(网站)应答的标准,它作为一种应用层协议,应用于分布式、协作式和超媒体信息系统。它作为一种请求/响应式的协议,客户端在与服务器建立连接后,就可以向服务器发送请求,这种请求被称为HTTP请求,服务器接收到请求后会做出响应,被称为HTTP响应

 

HTTP协议的特点:

  1. 支持客户端(浏览器就是一种Web客户端)/服务器模式
  2. 简单快速。客户端向服务器请求服务时,只需传送请求方式和路径。常用的请求方式有GET、POST等,不同的请求方式规定的客户端和服务器联系的类型也不同。HTTP比较简单,使得HTTP服务器的程序规模小,通信速度快
  3. 灵活。HTTP允许传输任意类型的数据,正在传输的数据类型由Content-Type加以标记
  4. 无状态。HTTP时无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则必须重新传输,因此这样可能会导致每次连接传送的数据量增大

HTTP1.0和HTTP1.1

基于HTTP1.0协议的客户端与服务器在交互过程中,每次发送请求信息都需要重新建立连接(建立TCP连接、发送HTTP请求、回送HTTP响应和关闭TCP连接),即客户端与服务器建立连接后,每次只能处理一个HTTP请求

基于HTTP1.1协议的客户端与服务器支持持久连接,即在一个TCP连接上可以传送多个HTTP请求和响应并且在发送下次请求时,无需等待上次请求的返回结果,服务器会根据客户端发送请求的先后顺序一次返回响应结果

HTTP1.1不仅继承了HTTP1.0的优点,而且有效解决了HTTP1.0的性能问题,显著减少了浏览器与服务器交互所需要的时间

HTTP消息

当用户在浏览器中访问某个URL地址、单击网页的某个超链接或者提交网页上的form表单时,浏览器都会向服务器发送请求数据,即HTTP请求消息

服务器收到请求数后,会将处理后的数据发送给客户端,即HTTP响应消息

HTTP请求消息和HTTP响应消息统称为HTTP消息

在HTTP消息中,除了服务器的响应实体内容(例如HTML网页、图片等)外,其他消息对用户都是不可见的,例如请求方式、HTTP协议版本号、请求头和响应头等。观察这些“隐藏”信息,可利用浏览的网络查看工具(Network)

1、HTTP请求消息

在HTTP中,一个完整的请求消息由请求行请求头实体内容3个部分组成,每个部分都有不同的功能

实体内容(数据体)可以被认为是附加在请求之后的文本或二进制文件,只有请求方式为post的时候,实体内容才会有数据(即请求参数)

1.1 HTTP请求行

HTTP请求行位于请求消息第一行,它包括三个部分,分别是请求方式、资源路径和HTTP版本

实例:

GET /index.html HTTP/1.1

1.2 HTTP请求头

在HTTP请求消息中,请求行之后便是若干请求头。请求头主要是用来向服务器传递附加消息,例如客户端可以接收的数据类型、压缩方式、语言以及发送请求的超链接所属页面的URL地址等信息

请求头由头字段名称和值组成,头字段名称和值之间用冒号和空格分隔(头字段名称不区分大小写,但习惯上将单词的第一个字母大写 )

常见的头字段说明
Accept指出客户端能够处理的MIME类型
Accept-Charset告知服务器客户端所使用的的字符集
Accept-Encoding指定客户端能够进行解码的数据编码方式(通常指某种压缩方式)
Accept-Language指定客户端期望服务器返回哪个国家语言的文档
Authorization当客户端访问受口令保护的网页时,Web服务器会发送401响应状态码和WWW-Authenticate响应头,要求客户端使用Authorization请求头来响应
Proxy-Authorization作用于用法与Authorization头字段基本相同,该请求头是服务器向代理服务器发送的验证信息
Host指定资源所在的主机名和端口号
If-Match当客户端再次向服务器请求这个网页文件时,可以使用If-Match附带以前缓存的实体标签内容,这个请求被视为一个条件请求
If-Modified-Since作用与If-Match类似,只不过它的值为GMT格式的时间
Range指定服务器只需返回文档中的部分内容及内容范围,这对较大文档的断点续传非常有用
If-Range只能伴随Range头字段一起使用,其值可以是实体标签或GMT格式的时间
Max-Forward指定当前请求可以途径的代理服务器数量,每经过一个代理服务器,此数值-1
Referer常被网站管理人员用来追踪网站的访问者时如何导航进入网站的,同时还可以用于网站的防盗链
User-Agent指定浏览器或者其他客户端程序使用的操作系统及版本、浏览器及版本、浏览器渲染引擎、浏览器语言等,以便服务器针对不同类型的浏览器而返回不同的内容

2、HTTP响应消息

当服务器收到浏览器的请求后,会发送请求消息给客户端。一个完整的响应消息主要包括响应状态行响应头实体内容,每个组成部分都代表了不同的含义

2.1 HTTP响应状态行

HTTP响应状态行位于响应消息的第一行,它包括三个部分,分别是HTTP版本、一个表示成功或者失败的状态码和对状态码进行描述的文本信息

示例:

HTTP/1.1 200 OK

状态码由三位数字组成,表示请求是否被理解或满足,第一位数字定义了响应的类型

1xx:表示请求已接收,需要继续处理

2xx:表示请求已成功被服务器接收、理解并接受

3xx:为完成请求,客户端需进一步细化请求

4xx:客户端的请求有错误

5xx:服务器出现错误

Web开发中的常见状态码
状态码说明
200表示服务器成功处理了客户端的请求。客户端的请求成功,响应消息返回正常的请求结果
302表示请求的资源临时从不同的URL响应请求,但请求者应继续使用原有位置来进行以后的请求。例如,在请求重定向中,临时URL应该是响应的Location头字段所指向的资源
304如果客户端有缓存的文档,它会在发送的请求消息中附加一个 If-Modified-Since 请求头,表示只有请求的文档在If-Modified-Since指定的时间之后发生过更改,服务器才需要返回新文档。状态码304表示客户端缓存的版本是最新的,客户端应该继续使用它。否则,服务器将使用状态码 200 返回所请求的文档
404表示服务器找不到请求的资源。例如,访问服务器不存在的网页经常返回此状态码
500表示服务器发生错误,无法处理客户端的请求。大部分情况下,是服务器的程序发生了错误,一般会提供具体的错误信息

2.2 HTTP响应头

在HTTP响应消息中,第一行为响应状态行,紧接着便是若干响应头,服务器通过响应头向客户端传递附加信息,包括服务程序名、被请求资源需要的认证方式、客户端请求资源的最后修改时间、重定向地址等信息

常见的响应头字段说明
Accept-Ranges用于标识服务器自身支持范围请求,该头字段的具体值用于定义范围请求的单位,单位值可以为none或bytes
Age用于指出当前网页文档可以在客户端或代理服务器中缓存的有效时间,设置值为一个以秒为单位的时间数
ETag用于向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签,每个版本的资源的实体标签是不同的,通过实体标签可以判断在不同时间获得的同一资源路径下的实体内容是否相同
Location用于通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL 地址
Retry-After可以与503状态码配合使用,告诉客户端在什么时间可以重新发送请求。也可以与任何一个3xx状态码配合使用,告诉客户端处理重定向的最小延时时间。Retry-After 头字段的值可以是 GMT格式的时间,也可是一个以秒为单位的时间数
Server用于指定服务器软件产品的名称
Vary用于指定影响了服务器所生成的响应内容的那些请求头字段名
WWW-Authenticate当客户端访方问受口令保护的网页文件时,服务器会在响应消息中回送01(Unauthorized)响应状态码和WWW-Authenticate 响应头,指示客户端应该在Authenticate 请求头中使用WWW-Authenticate 响应头指定的认证方式提供用户名和密码信息
Proxy-AuthenticateProxy-Authenticate 头字段用于代理服务器的用户信息验证,用法与WWW-Authenticate 头字段类似
Refresh用于告诉浏览器自动刷新页面的时间,它的值是一个以秒为单位的时间数
Content-Disposition如果服务器希望浏览器不是直接处理响应的实体内容,而是让用户选择将响应的实体内容保存到一个文件中,就需要使用Content-Disposition 头字段

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【springboot】—— 后端Springboot项目开发

后端Springboot项目开发 步骤1 先创建数据库,并在下面创建一个user表,插入数据,sql如下: CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,email varchar(255) NOT NULL COMMENT 邮箱,password varchar(255)…

王益分布式机器学习讲座~Random Notes (1)

0 并行计算是什么?并行计算框架又是什么 并行计算是一种同时使用多个计算资源(如处理器、计算节点)来执行计算任务的方法。通过将计算任务分解为多个子任务,这些子任务可以同时在不同的计算资源上执行,从而实现加速计…

ChatGLM2-6B发布,位居C-Eval榜首

ChatGLM-6B自2023年3月发布以来,就已经爆火,如今6月25日,清华二代发布(ChatGLM2-6B),位居C-Eval榜单的榜首! 项目地址:https://github.com/THUDM/ChatGLM2-6B HuggingFace&#xf…

Sequential用法

目录 1.官方文档解释 1.1原文参照 1.2中文解释 2.参考代码 3.一些参考使用 3.1生成网络 3.2 感知机的实现 3.3组装网络层 1.官方文档解释 1.1原文参照 A sequential container. Modules will be added to it in the order they are passed in the constructor. A…

【书】《Python全栈测试开发》——浅谈我所理解的『自动化』测试

目录 1. 自动化测试的What and Why?1.1 What1.2 Why2. 自动化的前戏需要准备哪些必备技能?3. 自动化测试类型3.1 Web自动化测试3.1.1 自动化测试设计模式3.1.2 自动化测试驱动方式3.1.3 自动化测试框架3.2 App自动化测试3.3 接口自动化测试4. 自动化调优《Python全栈测试开发…

Springboot钉钉免密登录集成(钉钉小程序和H5微应用)

欢迎访问我的个人博客:www.ifueen.com RT,因为业务需要把我们系统集成到钉钉里面一个小程序和一个H5应用,并且在钉钉平台上面实现无感登录,用户打开我们系统后不需要再输入密码即可登录进系统,查阅文档实际操作过之后记录一下过程…

Qt6.2教程——4.QT常用控件QPushButton

一,QPushButton简介 QPushButton是Qt框架中的一种基本控件,它是用户界面中最常见和最常用的控件之一。QPushButton提供了一个可点击的按钮,用户可以通过点击按钮来触发特定的应用程序操作。比如,你可能会在一个对话框中看到"…

VMware Tools安装“保熟“技巧

网上关于如何安装VMware Tools也有很多帖子,但是基本很难对症下药。下面笔者给出两种情况,读者可根据自己概况定位自己的问题,从而进行解决。 如果读者安装操作系统时是如笔者如下截图 那么读者可参考这个解决方案 安装VMware Tools选项显示灰色的正确解…

高等数学下拾遗+与matlab结合

如何学好高等数学 高等数学是数学的一门重要分支,包括微积分、线性代数、常微分方程等内容,它是许多理工科专业的基础课程。以下是一些学好高等数学的建议: 扎实的基础知识:高等数学的内容很多,包括初等数学的一些基…

【数据库】关系型数据库与非关系型数据库解析

【数据库】关系型数据库与非关系型数据库解析 文章目录 【数据库】关系型数据库与非关系型数据库解析1. 介绍2. 关系型数据库3. 非关系型数据库4. 区别4.1 数据存储方式不同4.2 扩展方式不同4.3 对事务性的支持不同4.4 总结 参考 1. 介绍 一个通俗易懂的比喻:关系型…

哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理

哈工大计算机网络传输层协议详解之:可靠数据传输的基本原理 哈工大计算机网络课程传输层协议详解之:流水线机制与滑动窗口协议哈工大计算机网络课程传输层协议详解之:TCP协议哈工大计算机网络课程传输层协议详解之:拥塞控制原理剖…

Postman中读取外部文件

目录 前言: 一、postman中读取外部文件的格式 二、Postman中如何导入文件 三、在Postman读取导入的数据文件 前言: 在Postman中,您可以使用"数据文件"功能来读取外部文件,如CSV、JSON或Excel文件。这使得在测试中使用…

Bootstrap CSS 概览

文章目录 Bootstrap CSS 概览HTML 5 文档类型(Doctype)移动设备优先响应式图像全局显示、排版和链接基本的全局显示排版链接样式 避免跨浏览器的不一致容器(Container)Bootstrap 浏览器/设备支持 Bootstrap CSS 概览 在这一章中&a…

成为行业风向标,亚马逊云科技近年在数据库排名逐年上升

近10年,全球数据库市场加速变革,云数据库尤其是云原生数据库成为整个数据库市场的关键变量。某种程度上,亚马逊云科技作为全球云原生数据库的领导者,具有行业风向标的价值。 近期,发生了一件对全球数据库市场具有标志性…

爬虫入门指南(4): 使用Selenium和API爬取动态网页的最佳方法

文章目录 动态网页爬取静态网页与动态网页的区别使用Selenium实现动态网页爬取Selenium 的语法及介绍Selenium简介安装和配置创建WebDriver对象页面交互操作 元素定位 等待机制页面切换和弹窗处理截图和页面信息获取关闭WebDriver对象 使用API获取动态数据未完待续.... 动态网页…

GB51309实施后对于消防应急照明和疏散指示系统在城市隧道应用中的影响

安科瑞 崔丽洁 【摘要】:应急照明和疏散指示系统被广泛运用于城市隧道、楼宇建筑、地下管廊等各个方面。当隧道这类特殊建筑内出现火灾或事故时,可靠的应急照明和疏散指示系统对于人员的安全逃生有着重要的作用。随着GB51309-2018《消防应急照明和疏散指…

java 调用 opencv 识别图片

前言 opencv 的 github 地址 opencv 官网 本文介绍如何使用 java 来调用 opencv 下载opencv opencv下载 页面根据自己电脑操作系统下载最新的安装包,我这里下载的是 4.7.0 版本。 (4.7.0 版本里的 opencv-470.jar 包是使用 jdk11 编译的&#xff0c…

JVM 常量池、即时编译与解析器、逃逸分析

一、常量池 1.1、常量池使用 的数据结构 常量池底层使用HashTable key 是字符串和长度生成的hashValue,然后再hash生成index, 改index就是key;Value是一个HashTableEntry; 1、key hashValue hash string(name, len) i…

66. 加一

LeetCode-66. 加一 1、题目描述2、解题思路3、代码实现4、解题记录 ) 1、题目描述 题目描述: 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以…

【NLP】用python实现文本转语音处理

一、说明 介绍一款python调用库,离线软件包pyttsx3 API,它能够将文字转化成语音文件。Python 中有多种 API 可用于将文本转换为语音。pyttsx3 是一个非常易于使用的工具,可将输入的文本转换为音频。与其它类似的库不同,它可以离线…