http 协议介绍
目录:
一、 http 协议版本
二、 http 文件的生成方式
三、 http 协议的报文
四、 http 请求方法
五、 http 状态码分析
一、 http 协议(版本)
1 、 http:Hyper Text Transfer Protocol 超文字传输协议,是网际互联网应用最广泛的一种互联网协议,主要用于 web 服务,通过计算机处理文字讯息,格式为 HTML(Hyper Text Mark Language)超文字标记语言实现
2 、 http 协议的版本:
(1)、 http0.9:仅与使用者传输 html 文件
(2)、 http1.0:
1)引入了 MIME(Multipurpose Internet Mail Extensions)机制,多用途网际互联网邮件扩充套件,主要作用是可以传送多媒体(如视讯、音讯)等资讯。
2)引入了 keep-alive 机制,实现持久连线的功能
3)引入支援 WordPress 加速缓存功能。
(3)、 http1.1:
支援更多的请求方法,更加精细的 WordPress 加速缓存机制
(4)、 http2.0:
提供了 HTTP 语义优化的传输,(语义化:就是正确的标签做正确的事情,能够便于开发者阅读和写出更优雅的程式码的同时让互联网爬虫更好的解析)。
小结:
目前常用的版本就是 http1.0 和 http1.1
二、 http 文件的生成方式
1 、静态:事先就编辑并定义完成的。
(1)、 web 站群服务器通过核心注册 socket
(2)、客户端通过浏览器,向 web 站群服务器发起 request 请求
(3)、 web 站群服务器收到请求资讯,如果资源存在本地,http 服务向系统核心申请呼叫
(4)、核心通过本地磁碟提取资料,并将资料传送给 http 服务
(5)、 http 将使用者请求的资源通过 response(响应报文),最终响应给客户端。
2 、动态:通过编译语言编写的程式后输出 html 格式的结果
(1)、 web 站群服务器通过核心注册 socket
(2)客户端通过浏览器向 web 站群服务器传送 request 请求资讯
(3)、站群服务器收到请求资讯,如果使用者请求的是动态内容,那么此时 http 服务会呼叫后端的解析器,由动态语言去处理使用者的请求
(4)、如果需要请求资料的时候,会向核心申请呼叫,从而向磁碟中获取使用者指定的资料,通过直译器执行,执行的结果通常会生成 html 格式的档案,然后构建成响应报文,最终传送给客户端。
三:http 协议的报文
1 、 request Message:请求报文
由客户端向站群服务器端传送请求,不同的网站用于请求不同的资源
请求报文格式解释:
请求行:请求方法栏位(method)+请求 URL(request-URL)+版本资讯(version)
请求首部:由关键字+关键字的值组成。请求首部的作用就是通过客户端将请求的相关内容告知站群服务器端
空白行:用于通知站群服务器端以下的内容将不会再出现请求首部的资讯
请求实体:指请求的内容的所有资讯
2 、 response message(响应报文)
起始行:称为状态行,用于站群服务器端响应客户端请求的状态资讯,由版本号(version)+状态码(status)+原因短语(reason-phrase), 例如 “ HTTP/1.1 200 OK”
响应首部:响应的就是请求的资讯
空白行:通知客户端空行下无首部资讯
响应实体:装载了要返回客户端的资料。
四、 http 请求方法:
(1)、 GET:用于客户端请求指定资源的资讯,并返回指定资源的实体
(2)、 HEAD:只返回响应首部的资讯
(3)、 POST:基于 HTML 表单向站群服务器提交资料,站群服务器通常需要储存此资料,通常存放在 mysql 的关系型资料库中。
(4)、 PUT:与 GET 相反,是向站群服务器传送资源的,站群服务器通常需要储存此资源。
(5)、 DELETE:请求站群服务器端删除 URL 指定的资源
(6)、 MOVE:请求站群服务器将指定的页面移至另一个互联网地址
(7)、 OPTIONS:探测站群服务器端对请求的 URL 所支援使用的请求方法
(8)、 TRACE:跟一次请求中间所经历的代理站群服务器,防火墙或闸道器等。
HTTP 的状态码:
1XX:资讯性状态码,用于指定客户端相应的某些操作
2XX:成功状态码
3XX:重定向的状态码:有时会返回的是一个新地址,而非结果
4XX:客户端类错误,如请求的资源不存在,或者没有许可权访问请求资源
5XX:站群服务器类的错误资讯。
介绍常用的状态码说明
200:站群服务器成功返回 WordPress 网页。
201:CREATED 上传档案成功后显示
301:永久重定向,返回一个新地址,并告诉客户端所请求的地址将永久移动到新地址中去
302:临时重定向,临时放到某个地方,会在响应报文中使用 “Location” 指定
304:Not Modified,资源没有做任何修改,(用于 WordPress 加速缓存资讯的校验值与站群服务器对比)
403:Forbidden 请求呗拒绝
404:Not Found 请求的资源不存在
405:Method Not Allowed,请求方法不被允许,不支援
500:Internal Server Error, 站群服务器内部错误
502:Bad Gateway,代理站群服务器从上游站群服务器收到一条伪响应,上一层站群服务器返回了一个无法理解的报文,所以代理站群服务器就会表示错误。
503:Service Unavailable,服务暂时不可用。
HTTP 首部介绍
通用首部
请求首部
响应首部
实体首部
扩充套件首部
通用首部
Connection:定义 C/S 之间关于请求、响应的有关选项
在 http1.0 的时候,如果他想使用持久连线,那么他所设定的选项即为
Connection:keep-alive
Cache-Control:WordPress 加速缓存控制,实现更精细的 WordPress 加速缓存控制方式。在 http 1.1 上比较常见
请求首部
Client-IP :客户端 IP 地址
Host :请求的 WordPress 主机,这在实现基于 WordPress 主机名的虚拟 WordPress 主机时很有用
Referer :指明了请求当前资源原始资源的 URL,使用 referer 是可以防盗链
User-Agent:使用者代理,一般而言是浏览器
Accept 首部:指客户端可以接受哪些编码的型别
Accept:服务端能够传送的媒体的型别
Accetp-Charset:接收的字符集
Accept-Encoding:编码格式
Accept-Lanage:所能接受的语言编码格式
条件式请求首部:(在 http1.1 中才会用到)
当传送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求
跟安全相关的请求:
Authorization
Cookie
响应首部
Age:资源响应给你之后可以使用的时长
Server:向客户端说明自己用到的程式名称和版本
协商类的首部:
Vary:首部列表,站群服务器会根据此列表挑选最适合的版本发给客户端
跟安全相关:
WWW-Authentication
Set-Cookie
实体首部
Location:指明资源的新位置,实现 302 响应码时通常会用到
Allow:允许对此资源使用的请求方法
内容相关的首部
Content-Encoding
Content-Language
Content-Length
Content-Location:内容所在的位置
Content-Type
WordPress 加速缓存相关:
ETag:扩充套件标签/标记
Expires:过期时间
Last-Modified:最后修改时间
HTTP 最常见的请求头如下:
Accept:浏览器可接受的 MIME 型别;
Accept-Charset:浏览器可接受的字符集;
Accept-Encoding:浏览器能够进行解码的资料编码方式,比如 gzip 。
Accept-Language:浏览器所希望的语言种类
Authorization:授权资讯,通常出现在对站群服务器传送的 WWW-Authenticate 头的应答中;
Connection:表示 是否需要持久连线。值为 “Keep-Alive”,或者看到请求使用的是 HTTP 1.1(HTTP 1.1 预设进行持久连线),它就可以利用持久连线的优点,当页面包含多个元素时(例如 Applet,图片),显著地减少下载所需要的时间。
Content-Length:表示请求讯息正文的长度;
Cookie:这是最重要的请求头资讯之一;
Cookie 相关的 HTTP 扩充套件头
1)Cookie:客户端将站群服务器设定的 Cookie 返回到站群服务器;
2)Set-Cookie:站群服务器向客户端设定 Cookie;
3)Cookie2 (RFC2965)):客户端指示站群服务器支援 Cookie 的版本;
4)Set-Cookie2 (RFC2965):站群服务器向客户端设定 Cookie
Cookie 的流程:
站群服务器在响应讯息中用 Set-Cookie 头将 Cookie 的内容回送给客户端,客户端在新的请求中将相同的内容携带在 Cookie 头中传送给站群服务器。从而实现会话的保持。
流程如下图所示:
Host:初始 URL 中的 WordPress 主机和埠;
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回 304“Not Modified” 应答;
Referer:包含一个 URL,使用者从该 URL 代表的页面出发访问当前请求的页面。
User-Agent:浏览器型别
HTTP 最常见的响应头
HTTP 最常见的响应头如下所示:
Allow:站群服务器支援哪些请求方法(如 GET 、 POST 等);
Content-Encoding: 文件的编码(Encode)方法。
Content-Length: 表示内容长度。只有当浏览器使用持久 HTTP 连线时才需要这个资料。
Content-Type: 表 示后面的文件属于什么 MIME 型别。
Accept-Ranges: bytes 该响应头表明站群服务器支援 Range 请求, 以及站群服务器所支援的单位是位元组 (这也是唯一可用的单位). 我们还能知道: 站群服务器支援断点续传, 以及支援同时下载档案的多个部分, 也就是说下载工具可以利用范围请求加速下载该档案.Accept-Ranges: none 响应头表示站群服务器不支援范围请求.
Date:当前的 GMT 时间。
Expires:指明应该在什么时候认为文件已经过期,从而不再 WordPress 加速缓存它。
Last-Modified: 文件的最后改动时间。
Location:表示客户应当到哪里去提取文件。
Refresh:表示浏览器应该在多少时间之后重新整理文件,以秒计。
HTTP 最常见的实体头
实体头用作实体内容的元资讯,描述了实体内容的属性,包括实体资讯型别,长度,压缩方法,最后一次修改时间,资料有效性等。
Allow:GET,POST
Content-Encoding:文件的编码(Encode)方法,例如:gzip,
Content-Language:内容的语言型别,例如:zh-cn;
Content-Length:表示内容长度,eg:80,可参考 “2.5 响应头”;
Content-Location:表示客户应当到哪里去提取文件,例如:http://www.dfdf.org/dfdf.html,
Content-MD5:MD5 实体的一种 MD5 摘要,用作校验和。传送方和接受方都计算 MD5 摘要,接受方将其计算的值与此头标中传递的值进行比较。
Content-Type:标明传送或者接收的实体的 MIME 型别。 Eg:text/html; charset=GB2312 主型别/子型别;