HTTP协议格式详解之首行信息解析

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本文档的应用层协议,通常用于在客户端和服务器之间传输网页、图片、视频等资源。它是建立在TCP/IP协议栈之上的应用层协议,使用标准的TCP连接来传输数据。HTTP的主要特点包括简单、灵活、可扩展性强等。

在OSI(Open Systems Interconnection)模型中,HTTP位于应用层,负责定义客户端和服务器之间的通信规则。应用层是OSI模型中最高层,它负责为用户提供各种网络服务和应用,如文件传输、电子邮件、Web访问等。HTTP作为应用层协议,定义了客户端和服务器之间如何发送和解释消息,以实现网页访问等功能。

HTTP通常使用TCP作为传输层协议,因为它需要可靠的数据传输服务来确保数据的完整性和可靠性。当客户端发起HTTP请求时,它会首先与服务器建立TCP连接,然后通过这个TCP连接来发送HTTP请求和接收HTTP响应。因此,HTTP和TCP之间是一种客户端-服务器的关系,HTTP依赖于TCP来提供可靠的数据传输服务。

总之,HTTP是应用层协议,用于在客户端和服务器之间传输超文本文档;TCP和UDP是传输层协议,负责在网络上传输数据。HTTP通常使用TCP作为传输层协议,以实现可靠的数据传输服务。

HTTP协议格式

请求行(Request Line)

1)请求(request)

请求行包含了请求方法、请求的资源路径和HTTP协议版本。常见的请求方法包括GET、POST、PUT、DELETE等。例如:

GET /index.html HTTP/1.1
1.请求方法(Request Method):

请求方法指示了客户端希望服务器对资源执行的操作。

a) 常见的请求方法包括:
  • GET:请求获取指定资源。GET请求通常用于从服务器获取数据,不会对服务器上的资源进行修改。
  • POST:向服务器提交数据,用于向服务器提交数据,比如表单数据。POST请求可能会导致服务器上的资源状态发生变化。
  • PUT:用于更新服务器上的资源,通常用于上传文件或更新已有资源。
  • DELETE:请求服务器删除指定的资源。
  • HEAD:类似于GET请求,但服务器只返回请求头部,不返回实际的资源内容。主要用于获取资源的元信息,比如检查资源是否存在、获取资源的大小等。
  • OPTIONS:用于获取目标资源所支持的通信选项。
  • TRACE:用于测试客户端到服务器之间的路径。
  • CONNECT:用于将连接改为管道方式的代理服务器。
b) GET和POST的区别:
  • 幂等性
    • GET请求:通常是幂等的,即对同一个URL的多次GET请求应该返回相同的结果。GET请求不应该对服务器的状态产生影响。
    • POST请求:通常不是幂等的,即对同一个URL的多次POST请求可能会产生不同的结果,因为POST请求通常用于提交数据,可能会导致服务器的状态发生变化。
  • 使用场景
    • GET请求:用于获取资源,通常用于向服务器请求特定资源,不应该对服务器的状态产生副作用。例如,获取网页、图片或其他静态资源。
    • POST请求:用于提交数据,通常用于向服务器提交表单数据、上传文件、进行数据更新或者创建新资源等操作。
  • 数据传输方式

    • GET请求:通过URL的query string 传输数据,body通常为空。数据以查询字符串的形式附加在URL的末尾,如https://www.example.com/search?q=query
    • POST请求:通过请求体(Request Body)传输数据,数据被包含在HTTP请求的消息体中发送给服务器。因此,POST请求的数据不会暴露在URL中。
2.资源路径(URL):

URL(统一资源定位符)是用于标识和定位互联网上资源的地址。它由多个组成部分组成,包括协议、主机、端口、路径、查询参数和片段等。

a) URL的具体组成部分:
  • 协议(Protocol):URL的第一部分指定了要用于访问资源的协议,通常是HTTP或HTTPS。协议部分以冒号加两个斜杠开头。例如,http://https://

  • 主机(Host):主机部分指定了资源所在的服务器的主机名或IP地址。例如,www.example.com192.168.1.1

  • 端口(Port):端口部分指定了服务器上正在监听的端口号。如果未指定端口号,则使用默认的端口号。HTTP协议的默认端口是80,HTTPS协议的默认端口是443。如果使用了默认端口,则通常不需要在URL中显式指定端口号。如果使用了非默认端口,则需要在主机名后面加上冒号和端口号。例如,www.example.com:8080表示使用了8080端口。

  • 路径(Path):路径部分指定了服务器上资源的路径。它以斜杠/开头,可以包含多个子路径,每个子路径用斜杠分隔。路径部分表示服务器上资源的位置或层次结构。例如,/index.html/blog/posts/2024/april

  • 查询参数(Query Parameters):查询参数部分用于向服务器传递额外的数据,通常以键值对的形式组成,多个参数之间用&符号分隔。查询参数通常用于GET请求,用于向服务器传递搜索条件、过滤条件或其他参数。查询参数以问号?开头,例如,?page=2&category=technology

  • 片段(Fragment):片段部分指定了资源中的一个特定片段或位置。它位于URL的最后,以井号#开头,常用于标识HTML文档中的特定元素或位置。片段通常用于在浏览器中滚动到特定位置或定位到特定内容。例如,#section2

b) URL encoding:

URL编码(URL encoding),也称为百分号编码(percent-encoding),是一种在URL中转义特殊字符和非ASCII字符的方法,以便它们能够在网络上进行安全传输和正确解释。URL编码将特殊字符替换为百分号(%)后面跟着两位十六进制数的形式。

URL编码通常用于以下情况:

  • 保留字符(Reserved Characters):URL中的某些字符具有特殊含义,例如问号(?)、井号(#)、百分号(%)、斜杠(/)等,如果这些字符需要作为普通字符的一部分出现在URL中,就需要对它们进行编码。

  • 非ASCII字符(Non-ASCII Characters):URL中只能包含ASCII字符,而对于非ASCII字符(如中文、日文、俄文等),需要进行编码,以便它们在URL中传输时不会出现乱码或被错误解释。

URL编码的过程很简单,就是将每个非ASCII字符或者需要转义的特殊字符转换成百分号(%)后跟着两位十六进制数的形式。例如:

  • 空格(空格在URL中需要转义为%20)被转码为 %20
  • 问号(?在URL中需要转义为%3F)被转码为 %3F
  • 字符"#"(#在URL中需要转义为%23)被转码为 %23
3.HTTP协议版本: HTTP1.0,HTTP1.1,HTTP2.0,这三者基于TCP,HTTP3(基于UDP)
2) 响应(response)

包含了HTTP协议的版本号、状态码和状态消息。状态码表示服务器对请求的处理结果,状态消息是对状态码的文本描述。例如,状态码200表示请求成功,状态消息为OK。

HTTP/1.1 200 OK
1.版本号 

HTTP状态码是服务器对客户端请求的响应结果的标识,每个状态码都有特定的含义。下面是一些常见的HTTP状态码及其含义:

  • 1xx(信息性状态码):表示请求已被接收,正在处理。

    • 100 Continue:服务器已收到请求的一部分,客户端应继续发送剩余的请求。
  • 2xx(成功状态码):表示请求已成功处理。

    • 200 OK:请求成功,服务器已成功处理了请求。
    • 201 Created:请求已被成功处理,并且在服务器上创建了新资源。
    • 204 No Content:服务器成功处理了请求,但不需要返回任何实体内容。
  • 3xx(重定向状态码):表示需要进行进一步的操作以完成请求。

    • 301 Moved Permanently:请求的资源已永久移动到新位置,客户端应该使用新的URL重新发起请求。
    • 302 Found:请求的资源临时移动到新位置,客户端应该使用新的URL重新发起请求。
    • 304 Not Modified:客户端可以通过缓存的版本访问资源,未返回实体内容。
  • 4xx(客户端错误状态码):表示客户端发送的请求有错误。

    • 400 Bad Request:服务器无法理解客户端发送的请求,通常由于语法错误。
    • 401 Unauthorized:请求需要用户身份认证。
    • 403 Forbidden:服务器拒绝请求,通常因为客户端没有访问资源的权限。
    • 404 Not Found:请求的资源未找到。
  • 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。

    • 500 Internal Server Error:服务器内部错误,无法完成请求。
    • 502 Bad Gateway:作为网关或代理服务器工作的服务器从上游服务器收到无效的响应。
    • 503 Service Unavailable:服务器当前无法处理请求,通常是由于维护或过载。
2.状态消息

状态消息往往与状态码对应

  • "OK" (200):请求成功。服务器成功处理了客户端的请求,返回了请求的资源或内容。

  • "Moved Permanently" (301):永久重定向。请求的资源已永久移动到新位置,客户端应该使用新的URL重新发起请求。

  • "Found" (302):临时重定向。请求的资源临时移动到新位置,客户端应该使用新的URL重新发起请求。

  • "Not Modified" (304):未修改。客户端可以通过缓存的版本访问资源,服务器未返回实体内容。

  • "Bad Request" (400):无效请求。服务器无法理解客户端发送的请求,通常由于语法错误。

  • "Unauthorized" (401):未授权。请求需要用户身份认证。

  • "Forbidden" (403):禁止访问。服务器拒绝请求,通常因为客户端没有访问资源的权限。

  • "Not Found" (404):未找到。请求的资源未找到。

  • "Internal Server Error" (500):服务器内部错误。服务器无法完成请求,发生了意外错误。

  • "Service Unavailable" (503):服务不可用。服务器当前无法处理请求,通常是由于维护或过载

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

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

相关文章

用echarts实现进度条

今天有个需求需要实现类似这种进度条 渐变,指示点,背景这些都比较容易实现,前面这段有个高度逐渐增大的地方卡住了,半天没想到用什么方式去实现,搜了一圈,发现可以用echarts来实现 let icon1 image://data…

AIGC浪潮下,鹅厂新一代前端人的真实工作感受

AIGC 这一时代潮流已然不可阻挡,我们要做的不是慌乱,而是把握住这个时代的机会。本文就和大家一起来探索在 AIGC 下,前端工程师即将面临的挑战和机遇。聊聊从以前到现在,AIGC 给我们带来了怎么样的变化,下一代前端工程…

Towhee

文章目录 关于 Towhee✨ 项目特点🎓 快速入门流水线预定义流水线自定义流水线 🚀 核心概念 关于 Towhee Towhee 是一个开源的 embedding 框架,包含丰富的数据处理算法与神经网络模型。通过 Towhee,能够轻松地处理非结构化数据&am…

从入门到实战:vue3路由知识点

本人在B站上关于vue3的尚硅谷的课程,以下是整理一些笔记。 1.两个知识点 1.路由组件通常存放在pages 或 views文件夹,一般组件通常存放在components文件夹。 组件可以分为: 1. 一般组件:亲手写标签出来的 2. 路由组件&#…

蓝桥杯练习笔记(十五)

蓝桥杯练习笔记(十五) 一、 首先要会欧拉函数去找到对应数字的所有互质的数的个数,然后要会快速幂去计算这种指数超级大的数字的幂积结果。 先学会第一个:欧拉函数。这个博主讲得不错,很清晰易懂。能够理解以下的公式…

ICLR 2024 | 鸡生蛋蛋生鸡?再论生成数据能否帮助模型训练

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 随着生成模型(如 ChatGPT、扩散模型)飞速发展&#x…

【MATLAB源码-第21期】基于matlab的BCH码编码译码仿真,调制使用QPSK,对比编码与未编码的误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 QPSK调制解调:QPSK(Quadrature Phase Shift Keying)调制解调**是一种数字调制技术,通常用于数字通信系统。 调制: 1. 首先,将数字信号分成两路&#xff…

量化交易入门(三十八)CCI指标Python实现和回测

今天我们先单纯用CCI指标来完成策略的编写,后续我们会改进这个策略,将CCI指标和前面讲到的MACD和RSI相结合来优化,看看我们优化后的效果会不会更好。 一、量化策略 CCI指标在量化交易中的策略: 在以下情况下生成买入信号&#…

Qt元对象系统

第二章Qt元对象系统 文章目录 第二章Qt元对象系统1.什么是元对象?2.元对象系统组成3.信号与槽信号和槽的本质绑定信号与槽自定义槽定义槽函数必须遵循一下规则槽函数的类型自定义槽案例 自定义信号自定义信号需要遵循以下规则信号和槽重载二义性问题 4.内存管理1. 简…

C++ | Leetcode C++题解之第6题Z字形变换

题目&#xff1a; 题解&#xff1a; class Solution { public:string convert(string s, int numRows) {int n s.length(), r numRows;if (r 1 || r > n) {return s;}string ans;int t r * 2 - 2;for (int i 0; i < r; i) { // 枚举矩阵的行for (int j 0; j i &l…

GDC回顾与MAU前瞻丨Flat Ads开启开发者流量变现新篇章

3月18日-22日,全球游戏行业最具规模、最有影响力的盛会——GDC 2024 在美国旧金山 Moscone Convention Center 成功举办,Flat Ads作为参展商亮相GDC大会,向全球游戏开发者展示我们的最新技术与服务。此次Flat Ads团队不仅洞察了行业最前沿的技术和发展趋势,同时也与诸多一线开发…

GWO-CNN-BiLSTM多输入回归预测|灰狼群算法优化的卷积-双向长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&…