网络【HTTP 协议】超文本传输协议

超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种 详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

  1. HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
  2. HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
  3. HTTP协议工作于 客户端-服务端 架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP 工作原理

HTTP是应用层协议。它是整个数据通信的基础,基于请求/响应模式,客户端与服务器之间通过互相发送报文来通信,工作流程如下:

  1. 建立连接: 客户端(Web浏览器)和服务器之间首先需要建立一个TCP连接(三次握手)。这是因为HTTP协议通常承载于TCP协议之上,确保数据可靠传输
  2. 发送请求: 客户端向服务器发送一个HTTP请求,这个请求包含请求行、请求头和请求体。请求行包括请求方法(如GET或POST),所请求资源的URL以及HTTP协议版本。请求头包含附加信息,比如用户代理、Cookie(保持会话)等。如果是POST请求(上传),请求体中还会包含提交的数据。
  3. 服务器响应: 服务器接收到请求后,根据请求内容和服务器上的资源生成HTTP响应。响应同样由三部分组成:状态行、响应头和响应体。状态行包括HTTP状态码和原因短语,响应头包含服务器类型、内容类型等附加信息,响应体则携带着实际返回给客户端的数据,例如HTML页面或图片等。
  4. 传输数据: 服务器将响应通过之前建立的TCP连接发送回客户端。客户端收到响应后,浏览器会根据返回的内容类型渲染出相应的页面或者处理其他类型的数据。
  5. 断开连接: 数据传输完成后,客户端和服务器关闭TCP连接并释放相关资源。由于HTTP是无状态的,每次通信都是独立的,不会默认保存之前的请求或响应信息。如果需要跟踪用户的状态,通常会使用Cookie或会话机制来实现。

HTTP 特点:

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

3、缓存控制:为了提高加载速度和减少带宽消耗,HTTP提供了缓存机制。

4、无连接:HTTP通常是一种无连接协议,这意味着每次连接只处理一个请求。一旦服务器处理完客户端的请求并且客户端接收到响应,连接就会断开。这种机制有助于节省传输时间,但同时也意味着每次新的请求都需要建立新的连接。

5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

6、持久连接:虽然HTTP/1.1默认是持久连接(也称为HTTP Keep-Alive),但这需要Web服务器和客户端的支持。持久连接可以减少TCP连接的建立和断开所带来的开销,提高传输效率。

7、支持 B/S 及 C/S 架构。


HTTPD 和NGINX 的区别

  1. 处理客户端请求:Apache采用同步多进程模型,为每个请求创建一个新线程。这意味着在高并发场景下,Apache会为每个连接分配一个独立的进程或线程,这可能会导致资源使用量随着并发数的增加而线性增长。Nginx则采用异步非阻塞方式,使用事件驱动架构在一个线程中处理多个请求。这种模型使得Nginx在处理大量并发连接时更为高效,尤其是在静态内容服务和反向代理方面。
  2. 性能和稳定性:Nginx因其轻量级和高效的事件驱动架构,在性能上通常优于Apache。它特别适用于需要处理高并发请求的场景。而Apache在低至中等流量的环境中表现良好,其模块化设计和丰富的功能使得它在稳定性和模块化方面有一定的优势。

URL 与 URI

URL(Uniform Resource Locator):统一资源定位符:指定了如何通过网络访问资源以及资源的位置

URI(Uniform Resource Identifier):统一资源标识符:用于标识某个资源的唯一位置

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。用来唯一的标识一个资源。

URL的各部分组成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

1、协议:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2、域名:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3、端口:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80

4、虚拟目录:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5、文件名

  • 从域名后的最后一个“/”开始到“?”为止,是文件名部分,index.asp
  • 如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件名部分
  • 如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分

本例中的文件名是“index.asp“,文件名部分不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分不是一个URL必须的部分

7、参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

  • GET /wzt/favicon.ico HTTP/1.1:表示请求方法为GET,请求的资源路径为/wzt/favicon.ico,使用的HTTP协议版本为1.1。
  • Accept: image/avif,image/webp,image/apng,image/svg+xml,image/,/*;q=0.8:表示客户端接受的图像类型和质量。
  • Accept-Encoding: gzip, deflate:表示客户端接受的压缩格式。
  • Accept-Language: zh-CN,zh;q=0.9:表示客户端接受的语言和优先级。
  • Connection: keep-alive:表示客户端希望保持连接,以便进行后续请求。
  • Cookie: _ga_C569W2WCN6=GS1.1.1712754252.1.0.1712754252.0.0.0; ...:表示客户端发送的Cookie信息,用于服务器识别用户。
  • Host: www.mobiletrain.org:表示请求的目标主机名为www.mobiletrain.org
  • Referer: 千锋教育IT培训班_IT培训机构良心品牌:表示请求的来源页面URL。
  • User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36:表示客户端的浏览器信息和操作系统信息。

这段响应信息是HTTP协议的一部分,它包含了服务器对客户端请求的响应。以下是各个字段的含义:

  • HTTP/1.1 200 OK:这是HTTP协议的版本和状态码,表示请求成功。
  • Server: nginx:服务器使用的是nginx。
  • Date: Wed, 10 Apr 2024 13:04:29 GMT:响应生成的时间。
  • Content-Type: image/x-icon:响应的内容类型是图像,具体格式为.ico。
  • ETag: "63478391-47e":ETag是用于缓存控制的标识符。
  • Access-Control-Allow-Origin: *:允许任何来源访问该资源。
  • Accept-Ranges: bytes:服务器接受字节范围请求。
  • X-Cache-Lookup: Cache Miss:表示请求的资源未在缓存中找到。
  • Last-Modified: Thu, 13 Oct 2022 03:18:41 GMT:资源的最后修改时间。
  • Content-Length: 1150:响应内容的长度,单位为字节。
  • X-NWS-LOG-UUID: 3120119176189980775:这可能是一个自定义的头部字段,用于日志记录。
  • Connection: keep-alive:表示客户端和服务器之间的连接将保持活动状态,以便进行后续请求。

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

客户端请求:

Connected to www.testpm.cn (47.244.247.240) port 80 (#0)
> GET /hello.txt HTTP/1.1   # 请求方式与版本协议。
> User-Agent: curl/7.29.0   #用什么客户端访问
> Host: www.testpm.cn  #主机名,域名。主机和端口号,
> Accept: */*  #匹配什么文件类型,“*” 是通用匹配。匹配所有类型

服务端响应:

< HTTP/1.1 200 OK       #请求返回的状态码
< Server: nginx/1.16.0  #请求的服务和版本号
< Date: Thu, 04 Jul 2019 08:19:40 GMT
< Content-Type: text/plain #文本类型,有html,plain:普通文本
< Content-Length: 12
< Last-Modified: Thu, 04 Jul 2019 08:13:25 GMT
< Connection: keep-alive  #是否支持长连接
< ETag: "5d1db525-c"  #标识,每次访问如果与最开始的一样返回304否则校验不一致返回200
< Accept-Ranges: bytes

HTTP 的工作过程

HTTP协议的工作过程可以通过一个简单的例子来解释,例如,当你在浏览器中输入一个URL(例如:www.baidu.com/test/index.html?name=qf&age=18)并按下回车键时,背后发生了什么?

1. 浏览器首先会解析你输入的URL,确定你要访问的是哪个网站,以及具体的页面路径。在这个例子中,你要访问的网站是www.baidu.com。

2. 浏览器会向DNS服务器发送一个请求,要求解析www.baidu.com的IP地址。DNS服务器会返回对应的IP地址。

3. 浏览器会向这个IP地址发送一个HTTP GET请求。这个请求包含了一些信息,例如你的浏览器类型,你接受的语言等。

4. 服务器收到这个HTTP请求后,会解析这个请求,确定你要获取的是哪个页面。然后,服务器会从硬盘中找到这个页面,然后返回一个HTTP响应。这个响应包含了页面的内容,以及一些元信息,例如页面的类型,编码方式等。

5. 浏览器收到HTTP响应后,会解析这个响应,然后将页面的内容显示在浏览器中。


HTTP 请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

重点方法:【重点】

GET:用于向服务器请求获取某个资源。(获取一个index.html页面)

POST:用于向服务器提交数据,通常用于表单提交、文件上传等场景。(会产生新的数据)

PUT:用于向服务器更新或保存某个资源,通常用于上传文件、更新数据等场景。(覆盖/更新文件、图片等,不会产生新的数据)

DELETE:用于向服务器删除某个资源,通常用于删除文件、删除数据等场景。

GET请求是最常见的请求方法,通常用于获取资源。

GET请求的参数会附加在URL之后,通过问号(?)分隔,参数之间用&符号连接。例如,www.baidu.com/test/index.html?name=qf&age=18。这种方式的缺点是传输数据的大小有限制(因为浏览器对URL的长度有限制),并且不适合传输敏感信息(如密码),因为参数会直接暴露在URL中。

POST请求通常用于提交数据。

POST请求将参数放在HTTP请求的主体中(HTTP的请求主体(Request Body)是HTTP请求消息的一部分,用于在客户端向服务器发送请求时附带额外的数据。这些数据可以是文本、JSON、XML或其他格式,具体取决于请求的类型和客户端与服务器之间的约定。),而不是URL中。POST请求没有对传输数据的大小进行限制,而且可以传输任何类型的数据,包括二进制数据。因此,POST请求通常用于提交表单数据。


HTTP状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:信息性--表示请求已接收,继续处理
  • 2xx:成功--表示请求已被成功接收、理解、接受
  • 3xx:重定向--要完成请求必须进行更进一步的操作
  • 4xx:客户端错误--请求有语法错误或请求无法实现
  • 5xx:服务器端错误--服务器未能实现合法的请求
200 OK                        //客户端请求成功
301                           //永久重定向
302                           //临时重定向
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

200 - 请求成功。表示成功处理了请求的状态代码。

301 - 表示被请求的资源已永久移动到新的位置。当服务器返回301状态码时,它会告诉客户端(如浏览器)请求的资源已被永久移动到另一个URL,客户端在接收到301响应后,应该使用新的URL发起后续的请求。

比如建设一个网站后,将网站的url变换了,重新申请一个域名,但是希望之前的用户访问之前url仍然可以访问到,就可以做一个重定向新的url下面。比如京东最早域名www.360buy.com名重定向到现在www.jd.com

302 -表示临时重定向。当服务器收到请求时,如果资源暂时不可用或已经移动到其他位置,服务器会返回一个HTTP 302状态码,客户端会自动发送一个新的请求到这个新的URL地址,以获取所需的资源。

403 - 表示服务器理解了客户端的请求,但是拒绝执行此请求。这通常意味着客户端没有访问所请求资源的权限。HTTP 403错误可能由多种原因引起,包括:

    1. 权限不足:服务器可能要求客户端提供有效的身份验证凭据,以便确定其是否具有访问请求资源的权限。如果客户端没有提供正确的凭据或凭据无效,服务器将返回403状态码。
    2. IP地址限制:服务器可能根据IP地址对访问进行限制。如果客户端的IP地址被服务器列入黑名单或没有被列入白名单,服务器将返回403状态码。
    3. 文件权限设置:服务器上的文件或目录可能设置了访问权限,如果客户端没有足够的权限访问这些文件或目录,服务器将返回403状态码。

404 - 表示客户端请求的资源在服务器上不存在或无法找到。当浏览器或客户端尝试访问一个网页或资源,但服务器无法找到与请求URL对应的文件或页面时,就会返回这个错误。

HTTP 404错误可能由以下原因引起:

    1. URL错误:输入的URL可能有误,比如拼写错误、大小写错误、路径错误或者参数错误等。
    2. 页面被删除或移动:请求的页面可能已经被删除,或者移动到了其他位置,而URL没有相应地更新。
    3. 服务器配置问题:服务器的配置可能存在问题,导致无法正确解析URL或找到相应的资源。
    4. 资源不存在:请求的资源(如文件、图片等)可能从未在服务器上创建或已被删除。

503 - 错误表示服务不可用。这通常意味着服务器暂时无法处理请求。

    1. 服务器过载:当服务器接收到的请求过多,超过了其处理能力时,就可能导致服务器过载。这可能是由于服务器硬件性能不足、网络带宽不足或应用程序代码存在问题等原因引起的。
    2. 服务器维护:服务器可能需要定期进行维护和升级,以保持其稳定性和性能。在这种情况下,服务器可能会暂时关闭,以便进行必要的更新和修复。
    3. 错误的服务器配置:Web服务器或应用服务器配置错误也可能导致HTTP 503错误。这包括代理服务器的配置错误或应用程序池的错误配置等。

504 - “网关超时”(Gateway Timeout)错误,通常发生在作为网关或代理的服务器没有从上游服务器(如另一个代理服务器或Web服务器)收到及时的响应时。这通常意味着代理服务器等待上游服务器的响应时间过长,超出了设定的等待时间阈值。

    1. 上游服务器过载:上游服务器可能由于处理过多的请求或资源不足而无法及时响应代理服务器的请求。
    2. 网络延迟或故障:代理服务器与上游服务器之间的网络连接可能存在问题,导致请求和响应的传输延迟或失败。
    3. 上游服务器配置错误:上游服务器的配置可能存在问题,导致它无法正确处理代理服务器的请求。
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值