HTTP协议基础

目录

HTTP是什么 

HTTP请求(get与post)

GET 方法:

POST 方法:

url的基本构成

常见的请求头与响应头 

请求头(Request Headers)

响应头(Response Headers)

HTTP相应码

100系列 - 信息响应

200系列 - 成功响应

300系列 - 重定向响应

400系列 - 客户端错误响应

500系列 - 服务器错误响应

浏览器是如何访问网站的


HTTP是什么 

        HTTP,全称HyperText Transfer Protocol(超文本传输协议),是一种用于从Web服务器传输超文本到本地Web浏览器的应用层协议。HTTP是互联网上应用最为广泛的一种网络协议,它工作在客户端-服务器模型之上,客户端(通常是浏览器)向服务器发送请求,服务器对请求进行响应。

HTTP请求(get与post)

简单来说,get用于请求资源,post用来提交资源。

GET 方法:

        用途:GET用来请求访问已经被URI(统一资源定位符)识别的资源。可以通过URI传参来指定服务器上的资源。

POST 方法:

        用途:POST用来向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件),并且可能会导致新的资源的创建或已有资源的修改。

url的基本构成

        URL(Uniform Resource Locator,统一资源定位符)是用于标识互联网上资源的位置以及访问这些资源的方法的标准格式。URL的基本构成可以分解为以下几个部分:

  1. 协议(Scheme):指明了用于访问资源的协议类型,例如HTTP、HTTPS、FTP等。这是URL的第一部分,通常以://结尾。

     

    例子:https://

  2. 主机名(Host Name):指定了资源所在的服务器的域名或IP地址。

     

    例子:www.example.com

  3. 端口号(Port Number):指定了服务器上监听的端口,默认情况下HTTP端口为80,HTTPS端口为443。如果使用默认端口,端口号可以省略。

     

    例子::后面跟端口号,如:8080

  4. 路径(Path):指定了服务器上的具体位置,可以包含目录层级和文件名。

     

    例子:/path/to/resource

  5. 查询字符串(Query String):包含了请求参数,通常用于GET请求中传递变量。查询字符串以?开始,并且可以包含多个键值对,键值对之间用&符号分隔。

     

    例子:?key1=value1&key2=value2

  6. 片段标识符(Fragment Identifier):也称为锚点(Anchor),用于标识文档内部的一个具体位置,通常用于跳转到页面内的某一部分。片段标识符以#开始。

     

    例子:#section1

https://www.example.com:8080/path/to/resource?key1=value1&key2=value2#section1
  • https 是协议。
  • www.example.com 是主机名。
  • 8080 是端口号。
  • /path/to/resource 是路径。
  • key1=value1&key2=value2 是查询字符串。
  • #section1 是片段标识符。

常见的请求头与响应头 

        HTTP请求头(Request Headers)和响应头(Response Headers)是HTTP消息的一部分,它们携带了客户端和服务端之间的元信息,这些元信息有助于控制请求或响应的行为。下面分别列出一些常见的请求头和响应头及其用途。

请求头(Request Headers)

请求头提供了关于客户端请求的额外信息,以及如何处理请求的指示。以下是一些常见的请求头:

1. Accept: 指定客户端能接受的内容类型列表,如 `Accept: text/html,application/xhtml+xml` 表示客户端可以接收HTML类型的响应。

2. Accept-Encoding: 客户端支持的内容编码方式,如 `Accept-Encoding: gzip, deflate` 表示客户端支持gzip或deflate压缩格式。

3. Accept-Language: 客户端优先接收的语言种类,如 `Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8` 表示客户端偏好接收英语(美式)语言的响应。

4. Authorization: 包含认证信息,通常用于Basic或Bearer Token认证。

5. Cache-Control: 指定请求和响应遵循的缓存机制,如 `Cache-Control: no-cache` 可以要求不缓存请求或响应。

6. Connection: 控制是否关闭连接,如 `Connection: keep-alive` 表示保持连接打开。

7. Content-Length: 请求消息体的长度(单位为字节),用于告诉服务器请求体的大小。

8. Content-Type: 请求消息体的MIME类型,如 `Content-Type: application/json` 表示请求体是一个JSON格式的数据。

9. Cookie: 包含客户端的Cookie信息,用于维护会话状态。

10. Host: 客户端请求的目标主机和端口,如 `Host: www.example.com`。

11. If-Modified-Since: 如果请求的资源自从指定的时间之后没有被修改过,则返回304(Not Modified)响应。

12. User-Agent: 客户端的软件信息,如浏览器类型、版本号等。

响应头(Response Headers)

响应头提供了关于响应的额外信息,帮助客户端理解响应内容。以下是一些常见的响应头:

1. Age: 响应在发送给客户端之前,在代理缓存中停留的时间。

2. Cache-Control: 控制请求和响应遵循的缓存机制,如 `Cache-Control: max-age=3600` 表示响应可以被缓存1小时。

3. Connection: 用于控制是否关闭连接,如 `Connection: close` 表示关闭连接。

4. Content-Encoding: 使用的内容编码方式,如 `Content-Encoding: gzip` 表示响应体已被gzip压缩。

5. Content-Length: 响应消息体的长度(单位为字节)。

6. Content-Type: 响应消息体的MIME类型,如 `Content-Type: image/jpeg` 表示响应体是一个JPEG图像。

7. Date: 服务器生成响应的日期和时间。

8. ETag: 实体标签,可以用来检查资源是否已更改,常用于验证缓存的有效性。

9. Expires: 响应在什么时间之后不再被缓存。

10. Last-Modified: 自上次资源被修改的时间。

11. Location: 当响应状态码为3xx时,该头部包含重定向地址。

12. Server: 服务器软件的名称和版本。

13. Set-Cookie: 服务器设置或更新Cookie。

14. Transfer-Encoding: 数据传输的编码方式,如 `Transfer-Encoding: chunked` 表示数据以分块的形式传输。

        这些头字段在实际的HTTP通信中起着至关重要的作用,它们帮助确保请求和响应能够在客户端和服务端之间正确地交换数据。

HTTP相应码

        HTTP响应码用于告知客户端请求的结果。响应码由三个数字组成,分为五个类别,每个类别都有其特定的意义。下面是HTTP响应码的主要分类及常见响应码:

100系列 - 信息响应


这类状态码表示请求已被接受,需要继续处理。

        100 Continue:初始部分请求已经成功,客户端应当继续发送请求的其余部分。
        101 Switching Protocols:服务器将遵从客户的请求切换协议。

200系列 - 成功响应


这类状态码表示请求已成功,动作已执行。

        200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。
        201 Created:请求成功并且服务器创建了新的资源。
        202 Accepted:请求已被接受,但尚未被处理。
        204 No Content:服务器已经成功处理了请求,但没有返回任何内容。

300系列 - 重定向响应


这类状态码表示需要客户端采取进一步的动作才能完成请求。

        300 Multiple Choices:针对请求,服务器可执行多种操作。常见于使用GET方法的链接:server可根据请求的资源选择一张图片或者不同版本网页中的一个。
        301 Moved Permanently:请求的资源已被永久移动到新位置,并且将来任何对此资源的引用都应该使用响应中获得的若干个URI之一。
        302 Found:请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续使用原有地址进行以后的请求。
        303 See Other:客户端应该跟随响应中的Location字段给出的URI,用GET方法检索请求的响应。
        304 Not Modified:自从上次请求后,请求的资源未修改过。条件性GET使用此响应码未更新本地资源。
        307 Temporary Redirect:和302 Found类似,但要求客户端保留原有请求方法重新发送。

400系列 - 客户端错误响应


这类状态码表示请求含有语法错误或无法完成。

        400 Bad Request:服务器不能或不会解析请求。
        401 Unauthorized:请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
        403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
        404 Not Found:请求失败,请求所希望得到的资源未被在服务器上发现。
        405 Method Not Allowed:请求方法无效,不允许在指定的URL上请求。

500系列 - 服务器错误响应


这类状态码表示服务器未能正常完成请求。

        500 Internal Server Error:服务器遇到了一个未曾预料的情况,导致了它无法完成对请求的处理。
        501 Not Implemented:服务器不支持当前请求所需要的某个功能。
        502 Bad Gateway:作为网关或代理工作的服务器从上游服务器收到了无效的响应。
        503 Service Unavailable:服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
        504 Gateway Timeout:作为网关或代理工作的服务器从上游服务器等待响应的时间太长。

浏览器是如何访问网站的

        当用户在浏览器中输入一个URL(Uniform Resource Locator,统一资源定位符)时,浏览器就会向服务器发起请求。

  1. 浏览器解析URL:浏览器首先解析URL,确定协议类型(http:// 或 https://)、主机名和路径。

  2. DNS解析:浏览器会查询DNS(Domain Name System,域名系统)服务器,将主机名转换为对应的IP地址。

  3. 建立TCP连接:浏览器通过三次握手建立与服务器的TCP连接(Transmission Control Protocol,传输控制协议)。这是为了确保数据传输的可靠性。

  4. 发送HTTP请求:一旦TCP连接建立成功,浏览器就会向服务器发送HTTP请求。常见的HTTP请求方法有GET、POST等。请求头包含了一些附加信息,比如User-Agent(标识浏览器版本和操作系统)、Accept(指定浏览器接受的数据类型)等。

  5. 服务器处理请求:服务器接收到请求后,会查找相应的文件或执行PHP脚本。PHP是一种服务器端脚本语言,它会处理请求并生成响应内容。

  6. 返回HTTP响应:服务器返回一个HTTP响应,包括状态码(如200表示成功,404表示页面未找到等)、响应头(如Content-Type指明响应内容的类型,如text/html代表HTML文档)以及响应主体(即实际的网页内容)。

  7. 关闭TCP连接:浏览器接收完所有数据后,关闭TCP连接。有时,为了节省资源,浏览器和服务器可能会保持持久连接,以便后续请求无需重新建立连接。

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

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

相关文章

生产力工具|vscode for mac的安装python库和使用虚拟环境(一)

一、在vscode中运行python代码(mac或windows) (一)在vscode中安装Python插件 若想在vscode中高效率的编辑Python代码,需要安装Python插件,点击下图中红框内的按钮: 然后在左上角的搜索框中输入…

Vue前端开发2.1 单文件组件

文章目录 一、单文件组件概念二、单文件组件构成1. 模板(Template)2. 样式(Style)3. 逻辑(Script) 三、单文件组件演示1. 创建Vue项目2. 启动Vue项目3. 用VS Code打开项目4. 清空样式文件代码5. 创建欢迎组…

【redis】热点key问题

【redis】热点key问题 【一】什么是热点key问题【二】什么样的key被称为热key【三】热点Key问题的危害【四】如何监控发现热点key【五】热点Key的解决方案【1】使用二级缓存【2】将热key分散到不同的服务器中【3】热key拆分【4】将核心/非核心业务做Redis的隔离 【六】业界已有…

Nature 正刊丨细菌免疫蛋白直接感知两种不同的噬菌体蛋白

01摘要 真核先天免疫系统使用模式识别受体通过检测病原体相关的分子模式来感知感染,然后触发免疫反应。细菌也进化出了类似的免疫蛋白,可以感知其病毒捕食者的某些成分,即噬菌体1,2,3,4,5,6。尽管不同的免疫蛋白可以识别不同的噬菌体编码的触…

log4j2.xml

log4j2.xml 1、log4j2.xml使用2、日志器的流程解析2.1、几个重要的类2.2、整体流程图 3、部分源码3.1、通过简单例子看源码3.2、log4j2.xml配置指导 如侵权&#xff0c;请联系&#xff0c;无心侵权&#xff5e; 如有错误&#xff0c;也请指正。 1、log4j2.xml使用 <?xml v…

Anaconda虚拟环境安装cuda和pytorch

首先电脑上要有Anaconda&#xff0c;使用conda创建一个虚拟环境,并激活 conda create yolov8 conda activate yolov8winR输入cmd&#xff0c;在命令窗口输入 NVIDIA-smi可以查看到自己电脑支持的cuda环境&#xff0c;如下图 再打开torch的官网 pytorch官网 查看目前支持的版…

目标检测——Cascade R-CNN算法解读

论文&#xff1a; Cascade R-CNN: Delving into High Quality Object Detection (2017.12.3) 链接&#xff1a;https://arxiv.org/abs/1712.00726 Cascade R-CNN: High Quality Object Detection and Instance Segmentation (2019.6.24) 链接&#xff1a;https://arxiv.org/abs…

Z 字形变换(6)

这道题之前一直不会做&#xff0c;明白他是什么意思&#xff0c;但是找不到方法或者方法过于繁琐 方法1&#xff1a; 这是我在力扣评论区看到的方法&#xff0c;太精彩了。 虽然我实现起来效率并不高&#xff0c;可能是我代码的问题&#xff0c;但是他的思路很巧妙。 字符串的…

Spring--1

spring是一个轻量级的&#xff0c;采用IOC与AOP编程思想的java后端开发框架&#xff0c;简化了企业级的应用开发。 Spring体系 数据访问层&#xff0c;Web层&#xff0c;配置中心&#xff0c;测试区 IOC 控制反转&#xff0c;将创建对象的控制权交由Spring框架&#xff0c;需…

音频分割:长语音音频 分割为 短语音音频 - python 实现

在做语音任务时&#xff0c;有是会用到的语音音频是长音频&#xff0c;这就需要我们将长音频分割为短音频。 该示例将声音的音量和静默时间结合作为语音的分割条件。 使用音量和静默时间结合的分割条件&#xff0c;能够比较好的进行自然断句&#xff0c;不会话语没有说完就切断…

Spring声明式事务管理:深入探索XML配置方式

前言 Spring的事务管理&#xff0c;无论是基于xml还是注解实现&#xff0c;本质上还是实现数据库的事务管理机制&#xff0c;因此要注意发送SQL的连接是否为同一个&#xff0c;这是实现声明式事务的关键。 以下案例和实现基于SSM整合框架完成&#xff0c;不知道如何整合SSM&…

【K8S系列】Kubernetes Pod 状态详细介绍及异常状态解决方案

在 Kubernetes 中&#xff0c;Pod 是最小的可调度单元&#xff0c;负责运行一个或多个容器。Pod 的状态能够反映其生命周期中的不同阶段&#xff0c;帮助用户了解当前的运行状况。本文将详细介绍 Kubernetes Pod 的各种状态及其可能的异常状态解决方案。 一、Pod 状态概览 Po…

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言&#xff0c;树高的规律&#xff1a; 高度为h的平衡二叉树的含有的最少结点数&#xff08;所有非叶节点的平衡因子均为1&#xff09;&#xff1a; n01&#xff0c;n11&#xff0c;n22 含有的最多结点数&#xff1a; (高度为h的满二叉树含有的结点数) ②…

Flutter在 iOS 中实现无弹窗获取剪切板内容

前言 在最新的项目需求中&#xff0c;我们需要在获取剪切板内容时避免弹出授权提示。这一功能是基于竞品的实现&#xff0c;旨在优化用户体验&#xff0c;特别是在推广获取跳转链接的场景下非常有用。 解决方案 通过查阅资料&#xff0c;我们发现对于 iOS 16 及以上的系统&a…

Fusion创建一个简单的api脚本文件

我的Fusion版本&#xff1a;Fusion 2.0.20476 x86_64 脚本模块在实用程序->附加模型->脚本和附加模块&#xff0c;快捷键为shifts 里面有一些演示脚本&#xff0c;可以直接使用 也可以自己创建一个新的脚本 创建的脚本在此处—— 选择脚本文件&#xff0c;点击编辑&a…

Unity Mirror NetworkManager初识

文章目录 Network Manager网络管理器什么是网络管理器&#xff1f;通过Transports进行定制化网络连接管理自定义连接地址和端口号Game State Management游戏状态管理Network Manager HUD玩家预制体及其生成控制Spawn Prefabs其他预制体注册Scene Management场景管理 Network Ma…

在Windows系统中,cmd 查看 MongoDB 相关信息

MongoDB是一种流行的NoSQL数据库&#xff0c;广泛应用于各种现代应用程序中。 1 查看MongoDB的版本号 要查看MongoDB的版本号&#xff0c;可以使用mongo命令连接到MongoDB&#xff0c;然后执行db.version()。 mongo连接到数据库后&#xff0c;执行以下命令&#xff0c;输出M…

读数据工程之道:设计和构建健壮的数据系统16源系统实际细节(下)

1. 数据共享 1.1. 云数据共享的核心概念是&#xff0c;多租户系统支持租户之间共享数据的安全策略 1.2. 任何具有细粒度权限系统的公有云对象存储系统都可以成为数据共享的平台 1.3. 数据共享也简化了数据市场的概念&#xff0c;在几个流行的云和数据平台上都可用 1.4. 数据…

RabbitMQ系列学习笔记(三)--工作队列模式

文章目录 一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、工作队列模式原理 与简单模式相…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作&#xff1a;Spring Boot 3. 阿里云 阿里云版制…