作者:cz小屁孩865 | 来源:互联网 | 2023-09-18 14:56
简单来说,HTTP就是一个基于应用层的通信规范
4.1.1 HTTP协议与SPDY协议
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务模型。HTTP通常承载于TCP协议之上,有时候也承载于TLS或SSL协议层之上,这个时候,就成了常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443
缺点是服务端不会主动的向客户端PUSH
SPDY协议的应用需要客户端浏览器和服务器端同时支持。优化了浏览器和服务器之间的通信,支持流复用,具备优先级的请求,主动发起请求,强制SSL安全传输等先进的特性
4.1.2 HTTP协议如何工作
浏览网页是HTTP协议的主要应用,一次HTTP操作称为一个事务
1 客户机于服务器需要建立连接,单击某个超链接,HTTP协议的工作开始。
2 建立连接后,客户机发送一个请求给服务器。
3 服务器接收到请求后,给予相应的响应信息
4 客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接
HTTP协议中的一些主要概念
1 请求
HTTP请求由三部分组成:请求头,请求报头,请求正文
请求行:Method Request-URL HTTP-Version CRLF
Method :请求方法(GET,POST,HEAD,PUT,DELETE,TRACE,CONNECT,OPTIONS)
Request URL:一个统一资源标识符
HTTP Version:请求的HTTP协议版本
CRLF:回车和换行
2 响应
HTTP响应也由三个部分组成:分别是状态行,消息报头,响应正文
状态行: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 Unauthorize:请求未经授权,这个状态代码必须和WWW Authenticate报头一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not found:请求的资源不存在,例如输入了错误的URL
500 internal Server Error:服务器发生不可预期的错误
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
3 报头
HTTP消息报头包括普通报头、请求报头、响应报头、实体报头
1 普通报头中有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息(缓存控制、连接控制)
2 请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(UA头,Accept)
3 响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request URL所标识的资源进行下一步访问的信息(Location)
4 实体报头定义了关于实体正文和请求所标识的资源的元信息,例如有无实体正文
几个比较重要的报头:
Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。
User Agent:简称UA,内容包含发出请求的用户信息。通常包含浏览者的信息,主要是浏览器的名称版本和所用的操作系统
Accept:告诉服务器可以接受的文件格式。通常这个值在各种浏览器中都差不多。
COOKIE:分两种:一种是客户端想服务器发送的使用COOKIE报头,可以有多个值,另一种是服务器发送给浏览器的,报头为Set COOKIE,只能有一个值,需要指明domain,path
Cache Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息设置Cache Control并不会修改另一个消息过程中的缓存处理过程。请求时缓存指令包括 no cache,no store,max age,max state,no transform,must revalidate,proxy revalidate,max age
Referer:头域允许客户端指定请求URL的源资源地址,这可以允许服务器生成回退链表,用来登录,优化缓存,Referer通常是流量统计系统用来记录来访者地址的参数
Content Length:内容长度
Content Range:响应的资源范围。可以在每次请求中标记请求的资源范围,在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,实现断点续传。迅雷就是这个原理,使用多线程分段读取网络傻姑娘的资源,最后再合并
Accept Encoding:指定能接收的编码方式
自定义报头:在http消息中,也可以使用一些在http1.1中正式规范里没有定义的头字段