@1 简介:
HTTP是万维网的应用层通信协议,web页面的所有数据都是通过这个文本协议进行传输、HTTP是一种无状态、由文本构成的请求响应(request-response)协议,这种协议使用的是客户端-服务器(client-server)计算模式
@2 版本:
HTTP 0.9 HTTP1.1 HTTP2.0 HTTP1.1是目前使用最为广泛的一个版本,最新的版本是HTTP2.0 HTTP/2
@3 HTTP请求
HTTP是一种请求-响应协议,协议涉及的所有事情医一个请求开始。HTTP请求由以下几部分组成:
1>:请求行(request-line);
2>:零个或任意多个请求首部(header);
3>:一个空行;
4>:可选的报文主体(body)
来看一个简单的HTTP请求:
请求方法 统一资源标识符(URI)
| |
| |
GET /Protocols/test/test.html HTTP/1.1 --HTTP 版本
Host: www.test.com
User-Agent: Mozilla/8.0
(empty line)
@3.1 请求方法
请求方法是请求行中的第一个单词,它指明了客户端想要对资源执行的操作,在HTTP0.9中只有GET一个方法,HTTP1.0中添加了POST和HEAD方法,在HTTP1.1中添加了PUT,DELETE,OPTIONS,TRACE,CONNECT,并允许开发者自行添加更多方法。
各个HTTP方法:
1> GET ----- 命令服务器返回指定的资源
2> HEAD ----- 与GET类似,唯一不同的是此方法不要求服务器返回报文的主体,通常用于在不获取报文主体的情况下取得响应的首部。
3> POST ----- 命令服务器将报文主体中的数据传递给URI指定的资源,服务器对数据执行的动作取决于服务器本身。
4> PUT ----- 命令服务器将报文主体中的数据设置为URI指定的资源。若指定位置已经存在,则覆盖,若无,则新建。
5> DELETE ----- 命令服务器删除URI指定的资源。
6> TRACE ----- 命令服务器返回请求本身。通过这个方法可以知道介于它和服务器之间的其他服务器是如何处理请求的。
7> CONNECT ----- 命令服务器与客户端建立一个网络连接,通常用于设置SSL隧道以开启HTTPS功能。
8> OPTIONS ----- 命令服务器返回它支持的HTTP方法列表
9> PATCH ----- 命令服务器使用报文主体中的数据对URI指定的资源进行修改。
@3.2 请求首部
HTTP请求方法定义额发送请求的客户端想要执行的动作,HTTP首部记录了与请求本身一级客户端有关的信息。请求首部由任意多个冒号分割的纯文本键值对组成,最后一回车(CR)和换行(LF)结尾。
大多数的HTTP请求首部都是可选的,宿主(Host)首部字段是HTTP1.1唯一强制要求的首部。根据请求使用的方法不同,如果请求的报文中包含有可选的主体,那么请求的首部还需要带有内容长度(Content-Length)字段或传输编码(Transfer-Encoding)字段。
常用的请求首部:
1> Accept ---- 客户端在HTTP响应中能够接受的内容类型。比如:客户端可以通过Accept:tex/html这个首部告知服务器自己希望在响应的主体中收到HTML类型的内容。
2> Accept-Charset ---- 客户端要求服务器使用的字符编码。比如:Accept-Charset:utf-8
3> Authorization ---- 用于向服务器发送基本的身份验证证书。
4> Cookie ---- 客户端在这个首部中把服务器之前设置的所有cookie回传给服务器。比如:Cookie:first_cookie=hello;second_cookie=workd;
5> Content-Length ---- 请求主体的字节长度。
6> Content-Type ---- 当请求包含主体的时候,这个首部用于记录主体内容的类型。在发送POST或PUT时,内容的类型默认为x-www-form-urlen-coded,在上传文件时,内容的类型应当设置为multipart/form-data。
7> Host ---- 服务器的名字及端口号。端口号默认80
8> Referrer ---- 发起请求的页面所在的地址
9> User-Agent ---- 对发起请求的客户端进行描述
@4 HTTP响应
HTTP响应报文是对HTTP请求报文的回复。HTTP响应也是由一部分文本行组成:
1> ---- 一个状态行
2> ---- 零个或任意数量的响应首部
3> ---- 一个空行
4> ---- 一个可选的报文主体
一个响应报文:
200 OK --------------- 状态行
Data: Sat,22 Nov 2018 17:58:58 GMT
Server: Apache/2
Last-Modified: Thu,28 Aug 2018 21:01:33 GMT
Content-Length:33225
Content-Type: text/html:charset=utf8
<!DOCYPE> -------------- 报文主体
<html>
<title>Hello</title>
</html>