首页 > 其他分享 >HTTP协议格式详解之首行信息解析

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

时间:2024-04-02 11:58:24浏览次数:22  
标签:HTTP 请求 URL 之首行 详解 服务器 资源 客户端

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,请求,URL,之首行,详解,服务器,资源,客户端
From: https://blog.csdn.net/m0_74209411/article/details/137209810

相关文章

  • 提升工作效率:B端工作台设计基础详解
    随着互联网和信息技术的快速发展,越来越多的企业开始以数字化、智能化的方式管理和运营自己的业务。B端工作台设计作为企业应用的重要组成部分,越来越受到重视。本文将从三个方面对B端工作台设计进行全面分析。让我们看看。1.B端工作台设计原则B端工作台设计应符合以下原则:1.......
  • Linux研究(6):Linux 硬链接和软连接-详解
    导言:当涉及到Linux文件系统中的链接时,有两种常见类型:硬链接(HardLink)和软链接(SymbolicLink,也称为符号链接或软连接)。它们用于在文件之间创建关联,提供了一些非常有用的功能。下面是对硬链接和软链接的详细解释以及一个实验样例。1.硬链接(HardLink)硬链接是通过文件系统......
  • Linux enable命令教程:启动或关闭shell内建指令(附实例详解和注意事项)
    Linuxenable命令介绍enable是Linux系统中的内建命令,用于启动或关闭shell内建指令。如果执行的文件名称与shell内建指令相同,可以使用enable-n来关闭shell内建指令。如果不加-n参数,enable可以重新启动已关闭的指令。Linuxenable命令适用的Linux版本enable命令在大多数Li......
  • Linux ntsysv命令教程:如何配置运行级别服务(附案例详解和注意事项)
    Linuxntsysv命令介绍ntsysv(NetworkSysV)是一个命令行应用程序,它提供了一个简单的文本用户界面来配置在选定的运行级别中要启动的服务。这个工具显示了可用服务的列表(来自/etc/rc.d/init.d/目录的服务)以及它们的当前状态和描述。Linuxntsysv命令适用的Linux版本ntsysv命......
  • 详解数仓对象设计中序列SEQUENCE原理与应用
    本文分享自华为云社区《GaussDB(DWS)对象设计之序列SEQUENCE原理与使用方法介绍》,作者:VV一笑。1.前言适用版本:8.2.1及以上版本序列SEQUENCE用来生成唯一整数的数据库对象,本文对序列SEQUENCE的使用场景、使用方法及相关函数进行了介绍,并针对序列SEQUENCE在使用中容易遇到的问......
  • C# HTTP帮助类
    HTTP请求类型枚举namespaceDemo{///<summary>///HTTP请求类型///</summary>publicenumHttpRequestType{///<summary>///GET请求///</summary>GET,///<summary>......
  • 强!10.6K star,一款开源HTTP测试工具,适合新手,简单、容易上手!
    大家好,我是狂师!今天给大家推荐一款开源的HTTP测试工具:Hurl,相比curl、wget功能更强大,且更容易上手、很适用新手使用。1、项目介绍Hurl是一个使用Rust语言开发的命令行工具,它允许用户运行以简单纯文本格式定义的HTTP请求。这个工具不仅适用于获取数据,还非常适合用于测试HTTP会话......
  • 【Frida】【Android】08_爬虫之网络通信库okhttp3
    ......
  • Servlet通常如何通过重写父类HttpServlet的doGet()、doPost()等方法来处理不同类型的H
    Servlet在JavaWeb应用程序中用于处理HTTP请求。javax.servlet.http.HttpServlet是一个抽象类,它提供了处理HTTP请求的标准机制。当您创建一个Servlet并让它继承自HttpServlet时,您可以重写其中的doGet()和doPost()方法以便分别处理GET和POST类型的HTTP请求。以下是Servlet处......
  • Offer必备算法20_队列_宽搜bfs_四道力扣题详解(由易到难)
    目录①力扣429.N叉树的层序遍历解析代码②力扣103.二叉树的锯齿形层序遍历解析代码③力扣662.二叉树最大宽度解析代码④力扣515.在每个树行中找最大值解析代码本篇完。①力扣429.N叉树的层序遍历429.N叉树的层序遍历难度中等给定一个N叉树,返回其节......