HTTP协议
1.HTTP协议
HTTP:一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。是在 Web 上进行数据交换的基础,是一种
client-server 协议。(请求通常是由像浏览器这样的接受方发起的。)
表单:提交数据
交互:HTTP协议
客户端大前端 请求------> <------响应 服务端 后端
1.1 HTTP报文分类:
- 请求报文:客户端向服务端发送请求的信号。
- 响应报文:服务端响应处理后回传给客户端的信号。
1.2 请求报文
组成:请求行、请求头、空行和请求体。
1.2.1 请求行
第一行 :
名称:请求行。
组成:请求方法、URI和HTTP协议版本3个字段,它们之间用空格分隔,最后以回车和换行符结尾进行内容分割,表示接下来的内容(下一行开始的)不是请求行的内容。
例:GET /index.php HTTP/1.1,
- GET是请求方法,
- /index.php是URL,
- HTTP/1.1表示使用的HTTP版本为1.1。
请求方法的类型较多,有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT,其中GET、POST最为常用。
1.2.1.1 GET
-
最为常见的请求方式
-
通常用于当客户端要从服务器中读取文档时,比如点击网页上的链接或者通过在浏览器的地址栏输入网址的方式来浏览网页,使用的都是GET方式。
-
使用GET方法请求时,请求参数和对应的值是跟在URL后面, 通过问号(“?”)和and连接符(“&”)以及“=”号连接。
-
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。
-
采用GET方法请求的HTTP报文是没有请求体的。因为GET方式传递的数据是直接表示在地址中,我们要传递的参数和值就已经存在于URL中。
-
GET方法把参数以及参数值都暴露在URL中了。
-
弊端:不利于数据的保密和安全,传输的数据量比较大时不宜采用GET方法。
1.2.1.2POST
- 非常常见的请求方式。
- 完美弥补了GET方法的不足。
- POST方法将要传输的数据封装在报文的请求体中。
- 对传输的数据大小没有限制,可以传输大量的数据。
- 因为数据封装在请求体中,没有直接暴露在URL中,所以比较私密和安全。
1.2.2 请求头
- 组成:键/值对,,每行一对,键和值用冒号“:”(英文)分隔。
- 作用:请求头部告知服务器所有有关于客户端请求的信息
典型的请求头:
-
User-Agent:产生请求的用户代理信息(浏览器信息): Mozilla/5.0
(Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36等;
-
Accept:客户端可识别的内容类型列 :
text/html,application/xhtml+xml,application/xml;
-
Accept-Language:客户端可接受的自然语言 - zh-
CN,zh;q=0.8,en;q=0.6,id;q=0.4;
-
Accept-Encoding:客户端可接受的编码压缩格式 - gzip, deflate, sdch, br
-
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
-
connection:连接方式,有close和keep-alive两种。
-
close:告诉WEB服务器或代理服务器,在完成本次请求的响应后,断开连接
-
keep-alive:告诉WEB服务器或代理服务器。在完成本次请求的响应后,
保持连接,以等待后续请求
-
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的
cookie - PSTM=1490844191;
BIDUPSID=2145FF54639208435F60E1E165379255;
1.2.3 请求体
请求体包含的就是请求数据,正如上文提到的,当使用的是GET方法的时候,没有请求体。
1.2.4 空行
作用:用户进行内容分割,表示请求头到此为止,下一行的内容不再是请求头。
1.3 响应报文
客户端向服务端发送请求之后,服务器接收并处理客户端发过来的请求后正常情况下会返回一个HTTP的响应消息,这个就是响应报文。
组成:状态行、消息报头、空行和响应正文。形式上除了状态行之外,其他三个部分与请求报文类似。
1.3.1 响应行
格式为:HTTP-Version Status-Code Reason-Phrase CRLF。
HTTP-Version表示服务器HTTP协议的版本;
Status-Code表示服务器发回的响应状态代码;
Reason-Phrase表示状态代码的文本描述。
状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx
:指示信息–表示请求已接收,继续处理。
2xx
:成功–表示请求已被成功接收、理解、接受。
3xx
:重定向–要完成请求必须进行更进一步的操作。
4xx
:客户端错误–请求有语法错误或请求无法实现。
5xx
:服务器端错误–服务器未能实现合法的请求。
各类型常见状态代码、状态描述的说明如下:
200 OK
:客户端请求成功。
400 Bad Request
:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized
:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden
:服务器收到请求,但是拒绝提供服务。
404 Not Found
:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error
:服务器发生不可预期的错误。
503 Server Unavailable
:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
1.3.2 响应头
和请求报文的请求头类似,响应头也由键值对组成,每行一对,键和值用英文冒号":" 分隔。
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息,
典型的响应头有:
- Server:包含处理请求的原始服务器的软件信息;
- Date:服务器日期;
- Content-Type:返回的资源类型 (MIME);
- Connection:连接方式;
- close:连接已经关闭;
- keep-alive:连接已保持,在等待本次连接的后续请求;
- Cache-Control:缓存控制;
- Expires:设置过期时间;
- Set-Cookie:设置 Cookie 信息。
1.3.4 空行
作为内容分割,表示以下不再是响应头的内容。
1.3.5 响应体
这个是服务器返回给浏览器的响应信息。