动态网站开发03:HTTP协议

HTTP是应用层协议,用于Web数据传输,基于C/S模式。其特点是简单快速、灵活和无状态。HTTP请求包括请求行、请求头和请求体,响应包括状态行、响应头和响应体。HTTP1.1引入持久连接以提高性能,解决了HTTP1.0每次请求需新建连接的问题。常见的HTTP状态码如200表示成功,404表示资源未找到,500表示服务器内部错误。

一、前言

HTTP是一种应用层协议,用于在Web应用程序之间传输数据。它是一种无状态协议,这意味着服务器不会在请求之间保留任何状态信息。以下是HTTP协议的详细解释:

二、HTTP概述

(一)、HTTP的概念

1、HTTP的概念

  • HTTP是HyperText Transfer Protocol的缩写,即超文本传输协议。它是一种请求/响应式的协议,客户端在与服务器建立连接后,就可以向服务器发送请求,这种请求被称作HTTP请求,服务器接收到请求后会做出响应,称为HTTP响应。

2、HTTP协议的特点

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

(二)、HTTP请求

1、HTTP请求由以下几部分组成

  1. 请求行:包含请求方法、请求URI和HTTP协议版本
  2. 请求头:包含有关请求的其他信息,例如Host、User-Agent、Accept等。
  3. 请求体:包含请求参数,例如表单数据或JSON数据。

2、HTTP请求行

  • HTTP请求行位于请求消息的第1行,它包括三个部分,分别是请求方式、资源路径以及所使用的HTTP版本,具体示例:GET /index.html HTTP/1.1
  • GET是请求方式,index.html是请求资源路径,HTTP/1.1是通信使用的协议版本。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行结束。
(1)请求方法
  • 当用户在浏览器地址栏中直接输入某个URL地址或者单击网页上的一个超链接时,浏览器将使用GET方式发送请求。如果将网页上的form表单的method属性设置为“GET”或者不设置method属性(默认值是GET),当用户提交表单时,浏览器也将使用GET方式发送请求。
  • 如果浏览器请求的URL中有参数部分,在浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后面。
(2)URI
  • URL地址:http://www.lzy.cn/javaForum?name=howard&pwd=123456, “?”后面的内容为参数信息。参数是由参数名和参数值组成的,并且中间使用等号(=)进行连接。如果URL地址中有多个参数,参数之间用“&”分隔。
  • 当浏览器向服务器发送请求消息时,参数部分会附加在要访问的URI资源后面:GET /javaForum?name=howard&pwd=123456,需要注意的是,使用GET方式传送的数据量有限,最多不能超过2KB。
(3)HTTP协议版本
  • HTTP自诞生以来,先后经历了很多版本,其中,最早的版本是HTTP 0.9,它于1990年被发行。后来,为了进一步完善HTTP,在1996年发行了HTTP 1.0版本,在1997年发行了HTTP 1.1版本。
1.HTTP1.0的定义
  • 基于HTTP 1.0协议的客户端与服务器在交互过程中需要经过建立连接、发送请求信息、回送响应信息、关闭连接4个步骤。

在这里插入图片描述

2.HTTP1.0的缺点
  • 客户端与服务器建立连接后,每次只能处理一个HTTP请求。对于内容丰富的网页来说,这样的通信方式明显有缺陷。

  • 当客户端访问时,需要发送三次请求,并且每次请求都需要与服务器重新建立连接。如此一来,必然导致客户端与服务器交互耗时,影响网页的访问速度。

3.HTTP1.1的介绍
  • 为了克服上述HTTP 1.0客户端与服务器交互耗时的缺陷,HTTP 1.1版本应运而生,它支持持久连接,也就是说在一个TCP连接上可以传送多个HTTP请求和响应,从而减少了建立和关闭连接的消耗和延时。
    在这里插入图片描述
  • 当客户端与服务器建立连接后,客户端可以向服务器发送多个请求,并且在发送下个请求时,无需等待上次请求的返回结果,服务器会按照客户端发送的请求先后顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容。HTTP 1.1不仅继承了HTTP 1.0的优点,而且有效解决了HTTP 1.0的性能问题,显著地减少了浏览器与服务器交互所需要的时间。

3、HTTP请求头

  • 在HTTP请求消息中,请求行之后便是若干请求头。请求头主要用于向服务器传递附加消息,例如,客户端可以接收的数据类型、压缩方法、语言以及发送请求的超链接所属页面的URL地址等信息。
  • 请求头中可以看出,每个请求头都是由头字段名称和值构成,头字段名称和值之间用冒号(:)和空格分隔,每个请求头之后使用一个回车换行符标志结束。需要注意的是,头字段名称不区分大小写,但习惯上将单词的第一个字母大写。
(1)HTTP请求头的字段
头字段说明
AcceptAccept头字段用于指出客户端程序(通常是浏览器)能够处理的MIME(Multipurpose Internet Mail Extension)类型
Accept-CharsetAccept-Charset头字段用于告知服务器客户端所使用的字符集
Accept-EncodingAccept-Encoding头字段用于指定客户端能够进行解码的数据编码方式,这里的编码方式通常指的是某种压缩方式
Accept-LanguageAccept-Language头字段用于指定客户端期望服务器返回哪个国家语言的文档
Authorization当客户端访问受口令保护的网页时,Web服务器会发送401响应状态码和WWW-Authenticate响应头,要求客户端使用Authorization请求头来应答
Proxy-AuthorizationProxy-Authorization头字段的作用与用法与Authorization头字段基本相同,只不过Proxy-Authorization请求头是服务器向代理服务器发送的验证信息
HostHost头字段用于指定资源所在的主机名和端口号
If-Match当客户机再次向服务器请求这个网页文件时,可以使用If-Match头字段附带以前缓存的实体标签内容,这个请求被视为一个条件请求
If-Modified-SinceIf-Modified-Since请求头的作用和If-Mach类似,只不过它的值为GMT格式的时间
Range用于指定服务器只需返回文档中的部分内容及内容范围,这对较大文档的断点续传非常有用
If-RangeIf-Range头字段只能伴随着Range头字段一起使用,其值可以是实体标签或GMT格式的时间
Max-Forward指定当前请求可以途经的代理服务器数量,每经过一个代理服务器,此数值就减1
RefererReferer头字段非常有用,常被网站管理人员用来追踪网站的访问者是如何导航进入网站的。同时Referer头字段还可以用于网站的防盗链
User-AgentUser-Agent中文名为用户代理,简称 UA,它用于指定浏览器或者其他客户端程序使用的操作系统及版本、浏览器及版本、浏览器渲染引擎、浏览器语言等,以便服务器针对不同类型的浏览器而返回不同的内容

(三)HTTP响应

1、HTTP响应由以下几部分组成:

  1. 状态行:包含HTTP状态代码和状态消息。
  2. 响应头:包含有关响应的其他信息,例如Content-Type、Content-Length等。
  3. 响应体:包含响应数据,例如HTML页面、JSON数据或图像文件。

2、HTTP响应状态行

  • HTTP响应状态行位于响应消息的第一行,它包括3个部分,分别是HTTP版本、一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息。
  • HTTP响应状态行具体示例:HTTP/1.1 200 OK
  • HTTP/1.1是通信使用的协议版本,200是状态码,OK是状态描述,说明客户端请求成功。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行结束。
(1)HTTP的状态码
  • 状态代码由3位数字组成,表示请求是否被理解或被满足。HTTP响应状态码的第一个数字定义了响应的类别,后面两位没有具体的分类。第一个数字有5种可能的取值。
    在这里插入图片描述
(2)Web开发中的常用状态码
状态码说明
200表示服务器成功处理了客户端的请求。客户端的请求成功,响应消息返回正常的请求结果
302表示请求的资源临时从不同的URI响应请求,但请求者应继续使用原有位置来进行以后的请求。例如,在请求重定向中,临时URI应该是响应的Location头字段所指向的资源
304如果客户端有缓存的文档,它会在发送的请求消息中附加一个If-Modified-Since请求头,表示只有请求的文档在If-Modified-Since指定的时间之后发生过更改,服务器才需要返回新文档。状态码304表示客户端缓存的版本是最新的,客户端应该继续使用它。否则,服务器将使用状态码200返回所请求的文档
404表示服务器找不到请求的资源。例如,访问服务器不存在的网页经常返回此状态码
500表示服务器发生错误,无法处理客户端的请求。大部分情况下,是服务器的CGI、ASP、JSP等程序发生了错误,一般服务器会在相应消息中提供具体的错误信息

3、HTTP响应头

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

4、HTTP响应头字段

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值