HTTP协议(学习笔记)
HTTP协议
一.HTTP概述
HTTP是一种客户端(用户)请求和服务器(网站应答的标准,它作为一种应用层协议,应用于分布式协作式和超媒体信息系统HIP是万维网数据通信的基础。
1.HTTP的概念
HTTP是一种请求响应式的协议,客户端在与服务器建立连接后,就可以向服务器发送请求,这种请求被称作HTTP请求,服务器接收到请求后会做出响应,称为HTTP响应。
2.HIP协议的特点:
(1)HTP协议支持客户端(浏览器就是一种web客户端)/服务器模式
(2)简单快速。客户端向服务器请求服务时,只需传送请求方式和路径。常用的请求方式有GET、POST等,不同的请求方式规定的客户端与服务器联系的类型也不同HTTP比较简单,使得HTTP服务器的程序规模小,因而通信速度很快。
(3)灵活。HTTP允许传输任意类型的数据,正在传输的数据类型由 (3)HTTP E Content-Type-type加以标记。
(4)无状态。HTTP是无状态协议。无状态是指协议对于事务处理没有记忆能力,如果后续处理需要前面的信息,则必须重新传输,这样可能导致每次连接传送的数据量增大。
二.HTTP消息
当用户在浏览器中访问某个URL地址、单击网页的某个超链接或者提交网页上的fomm表单时,浏览器都会向服务器发送请求数据,即HTTP请求消息。服务器接收到请求数据后,会将处理后的数据发送给客户端,即HTTP响应消息。
HTTP请求消息和HTP响应消息统称为HTP消息。在HTTP消息中,除了服务器的响应实体内容(例如HTML网页、图片等)外,其他信息对用户都是不可见的,例如请求方式、HTP协议版本号、请求头和响应头等。要想观察这些“隐藏”的信息,需要借助浏览器的网络查看工具。
1.HTTP请求消息
在HTTP中,一个完整的请求消息由请求行、请求头和实体内容3个部分组成,每部分都有不同的作用。
2.HTTP请求行
HTTP请求行位于请求消息的第1行,它包括3个部分,分别是请求方式、资源路径和所使用的HTTP版本,具体示例如下:
GET /index.html HTTP/1.1
上述示例就是一个HTTP请求行,其中,GET是请求方式,index.html是请求资源路径,HTTP/1.1是通信使用的协议版本。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行符结束。
关于请求资源和协议版本,读者都比较容易理解,而HTP请求方式对读者来说比较陌生,下面将对HTTP的请求方式进行介绍。
在HTTP的请求消息中,请求方式有GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT 和OPTIONS共8种,每种方式都指明了操作服务器中指定URI资源的方式。
| 请求方式 | 含义 |
|---|---|
|
GET | 请求获取请求行的UR所标识的资源 |
| POST | 向指定资源提交数据,请求服务器进行处理(如提交表单或者上传文件) |
| HEAD | 请求获取UR所标识资源的响应消息头 |
| PUT | 将网页放置到指定URL位置(上传/移动) |
| DELETE | 请求服务器删除UR所标识的资源 |
| TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
| CONNECT | 保留以供将来使用 |
| OPTIONS | 请求查询服务器的性能,或者查询与资源相关的选项和需求 |
3.HTTP请求头
在HTTP请求消息中,请求行之后便是若干请求头。请求头主要用于向服务器传递附加消息,例如客户端可以接收的数据类型、压缩方法、语言以及发送请求的超链接所属页面的URL地址等信息。
每个请求头都是由头字段名称和值构成的,头字段名称和值之间用冒号(:)和空格分隔,每个请求头之后使用一个回车换行符标志结束。需要注意的是,头字段名称不区分大小写,但习惯上将单词的第一个字母大写。当浏览器发送请求给服务器时,根据功能需求的不同,发送的请求头也不相同。
| 头字段 | 说明 |
|---|---|
| Accept | Accept头字段用于指出客户端程序(通常是浏览器)能够处理的MME(Multipurpose Intemet Mail Extensions)类型 |
| Accept-Charset | Accept-Charset-头字段用于告知服务器客户端所使用的字符集 |
| Accept-Encoding | Accept-Encoding-头字段用于指定客户端能够进行解码的数据编码方式,这里的编码方式通常指的是某种压缩方式 |
| Accept-Language | Accept-Language-头字段用于指定客户端期望服务器返回哪个国家语言的文档 |
| Authorization | 当客户端访问受口令保护的网页时,Web服务器会发送401响应状态码和www-Authenticate响应头要求客户端使用Authorization请求头来应答 |
| Proxy-Authorization | Proxy-Authorization-头字段的作用和用法与 Authorization头字段基本相同,只不过Proxy-Authorization请求头是服务器向代理服务器发送的验证信息 |
| Host | Host头字段用于指定资源所在的主机名和端口号 |
| If-Match | 当客户机再次向服务器请求这个网页文件时,可以使用If -Match-头字段附带以前缓存的实体标签内容,这个请求被视为一个条件请求 |
| If-Modified-Since | If -Modified-Since请求头的作用和If- Match类似,只不过它的值为GMT格式的时间 |
| Range | 用于指定服务器只需返回文档中的部分内容及内容范围,这对较大文档的断点续传非常有用 |
| If-Range | If- Range头字段只能伴随着 Range头字段一起使用,其值可以是实体标签或GMT格式的时间 |
| Max-Forward | 指定当前请求可以途经的代理服务器数量,每经过一个代理服务器,此数值就减1 |
| Referer | Referer头字段非常有用,常被网站管理人员用来追踪网站的访问者是如何导航进入网站的。同时Referer头字段还可以用于网站的防盗链 |
| User-Agent | User -Agent-译为用户代理,缩写为UA,它用于指定浏览器或者其他客户端程序使用的操作系统及版本、浏览器及版本、浏览器渲染引擎浏览器语言等,以便服务器针对不同类型的浏览器而返回不同的内容 |
三.HTTP响应消息
当服务器收到浏览器的请求后,会发送响应消息给客户端。一个完整的响应消息主要包括响应状态行、响应头和实体内容,每个组成部分都代表不同的含义。
1.HTTP响应状态行
HTTP响应状态行位于响应消息的第一行,它包括3个部分,分别是HTP版本、一个表示成功或错误的整数代码(状态码)和对状态码进行描述的文本信息。HTP响应状态行具体示例如下
HTTP/1.1 200 OK
上述示例就是一个HTP响应消息的状态行其中HTTP/1.1是通信使用的协议和协议版本,200是状态码,OK是状态描述,说明客户端请求成功。需要注意的是,请求行中的每个部分需要用空格分隔,最后要以回车换行符结束。
关于协议版本和文本信息,读者都比较容易理解,而HTTP的状态码对于读者来说则比较陌生,下面对HTTP的状态码进行介绍。
状态码由3位数字组成,表示请求是否被理解或满足。HTTP响应状态码的第一位数字定义了响应的类别,后面两位没有具体的分类。第一位数字有5种可能的取值。
1xx:表示请求已接收,需要继续处理。
2xx:表示请求已成功被服务器接收、理解并接受。
3xx:为完成请求,客户端需进一步细化请求。
4xx:客户端的请求有错误。
5xx;服务器出现错误。
HTTP的状态码数量众多,其中大部分无须记忆。下面仅列举几个Web开发中的常见状态码。
| 状态码 | 说明 |
|---|---|
| 200 | 表示服务器成功处理了客户端的请求。客户端的请求成功,响应消息返回正常的请求结果 |
| 302 | 表示请求的资源临时从不同的UR响应请求,但请求者应继续使用原有位置来进行以后的请求。例如,在请求重定向中,临时UR应该是响应的 Location头字段所指向的资源 |
| 304 | 如果客户端有缓存的文档,它会在发送的请求消息中附加个If- Modified-Since-请求头,表示只有请求的文档在If- -Modified-Since-指定的时间之后发生过更改,服务器才需要返回新文档。状态码304表示客户端缓存的版本是最新的,客户端应该继续使用它。否则,服务器将使用状态码200返回所请求的文档 |
| 404 | 表示服务器找不到请求的资源。例如,访问服务器不存在的网页经常返回此状态码 |
| 500 | 表示服务器发生错误,无法处理客户端的请求。大部分情况下,是服务器的CGI、ASP、JSP等程序发生了错误,一般服务器会在相应消息中提供具体的错误信息 |
2.HTTP响应头
在HTTP响应消息中,第一行为响应状态行,紧接着是若干响应头,服务器通过响应头向客户端传递附加信息,包括服务程序名、被请求资源需要的认证方式、客户端请求资源的最后修改时间、重定向地址等信息。
当服务器向客户端发送响应消息时,根据请求情况的不同,发送的响应头也不相同。
| 头字段 | 说明 |
|---|---|
| Accept-Ranges | 用于标识服务器自身支持范围请求,该头字段的具体值用于定义范围请求的单位,单位值可以为none或 bytes |
| Age | 用于指出当前网页文档可以在客户端或代理服务器中缓存的有效时间,设置值为一个以秒为单位的时间数 |
| ETag | 用于向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签,每个版本的资源的实体标签是不同的,通过实体标签可以判断在不同时间获得的同一资源路径下的实体内容是否相同 |
| Location | 用于通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL地址 |
| Retry-After | 可以与503状态码配合使用,告诉客户端在什么时间可以重新发送请求。也可以与任何一个3xx状态码配合使用,告诉客户端处理重定向的最小延时时间。 Retry-After-头字段的值可以是GMT格式的时间,也可是一个以秒为单位的时间数 |
| Server | 用于指定服务器软件产品的名称 |
| Vary | 用于指定影响了服务器所生成的响应内容的那些请求头字段名 |
| WWW-Authenticate | 当客户端访问受口令保护的网页文件时,服务器会在应消息中回送01( Unauthorized)响应状态码和WWW-Authenticate响应头,指示客户端应该在 Authenticate请求头中使用WWW- Authenticate响应头指定的认证方式提供用户名和密码信息 |
| Proxy-Authenticate | Proxy-Authenticate-头字段用于代理服务器的用户信息验证,用法与www- Authenticate头字段类似 |
| Refresh | 用于告诉浏览器自动刷新页面的时间,它的值是一个以秒为单位的时间数 |
| Content-Disposition | 如果服务器希望浏览器不是直接处理响应的实体内容,而是让用户选择将响应的实体内容保存到一个文件中,就需要使用 Content-Disposition-头字段 |
相关推荐
学习笔记(02):21天搞定分布式Python网络爬虫-HTTP协议介绍(1)
立即学习:https://edu.csdn.net/course/play/24756/280651?utm_source=blogtoedu HTTP服务器端口号是80端口 HTTPS 服务器端口号是443端口 URL 统一资源定位符(网址) 协议://主机名:端口号/查找路径/?查询字符串#锚点 浏览器会对URL中英文、数字和部分符号外的内容使用百分号+十六进制码进行编码。 作者:zs578695
HTTP_RFC723系列协议规范中英文对照翻译与学习笔记项目_HTTP协议RFC7230至RFC7235标准文档翻译_HTTP11协议语义内容条件请求范围请求缓存认证机制_网络.zip
HTTP_RFC723系列协议规范中英文对照翻译与学习笔记项目_HTTP协议RFC7230至RFC7235标准文档翻译_HTTP11协议语义内容条件请求范围请求缓存认证机制_网络.zip
学习笔记(03):21天搞定分布式Python网络爬虫-HTTP协议介绍(2)
立即学习:https://edu.csdn.net/course/play/24756/280652?utm_source=blogtoedu 请求method 1、get请求:指从服务器获取数据 2、post请求:向服务器发送数据、上传文件等 部分浏览器为了反爬虫,会反着来。要看服务器具体的用的方法。 请求头参数: User-Agent:浏览器名称,用于标识请求资源人的身份 Referer:表明请求来源 Cookie:用于标志身份 常见响应状态码: 1、200:请求正常 2、301:永久重定向 3、302:临时重定向 4、404:请求的URL再服务器上找不到 5、403:服务器拒绝访问 6、
apache的学习笔记
apache的学习笔记
读书笔记:图解http总结.zip
读书笔记:图解http总结


