应用层
应用层协议就是一端构造的数据,在另一端能够正确的进行解析。协议就是一种约定,约定就必须遵守。
什么是HTTP协议
HTTP,中文名称是超文本传输协议,简单来说,就是一个定义了浏览器向服务器发送请求,并且服务器将响应发给浏览器的协议。
HTTP的主要特点是:简单快速
,当客户端向服务器发送请求的时候,只需要发送请求的方法和路径,所以它通信速度很快。HTTP还有一个特点是灵活
,它可以传输任意类型的数据对象,HTTP也是一个无状态、无连接
的协议,无状态是指它对于事务没有记忆能力,也就是说,如果后续处理需要前面的信息,就必须重传,而无连接是限制每次连接只处理一个请求,服务器处理完客户请求并接收到客户的应答之后,就断开连接。同时,HTTP协议也支持B/S和C/S模式。
HTTP协议格式
HTTP请求:
HTTP请求包括四部分,请求行,请求报头,空行和正文。一行是一个属性。
- 首行:[方法]+[URL]+[版本]
请求行用空格将属性分为三部分:请求方法(Get/Post),请求资源在哪(一般以//开始),Http版本号 - Header:请求的属性,冒号分割的键值对,每组属性用\n分隔,遇到空行表示Header部分结束。
- Connection:keep-alive 表明该请求方式支持长链接
- Content-Length: 代表正文部分有多少
- Content-Type: 内容类型
- User-Agent:浏览器,操作系统的信息
- Accept:表示自己可以接收的信息
- Referer:从某个地方发来的请求
- Cookie:为了安全,存放session,用户信息保存在服务器,实现会话功能
- Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。
Post方法根据读空行将报头与有效载荷分离
补充:
1、HTTP请求如果有三部分,说明是Get方法,如果有四部分,说明是Post方法。
POST方法传参在正文部分,GET方法传参在URL中(长度受限制,有风险)。
2、目前HTTP传送数据时采用两种方式:
长链接:高效,Http 1.1
短链接:简单,Http 1.0
3、Https的加密在传输层与应用层之间的某一层,称为加密层,对应的也有解密层。
4、只有发送方的应用层和接收方的应用层能真正看到消息的内容,在网络中信息都是加密的。
5、加密是给整个Http加密。
HTTP响应:
HTTP响应包括四部分:状态行,响应报头,空行和响应正文(有效载荷)。
- 首行:[版本号]+[状态码]+[状态码解释]
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
- Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html页面,那么html页面内容就在body中。
HTTP方法
- GET:获得资源
- POST:上传文件到Web服务器
- DELETE:删除文件
- OPTIONS:询问支持的方法
- HEAD:获得报文首部(与GET类似,但是不要正文)
- CONNECT:要求用隧道协议连接代理
- PUT传输文件
- TRACE:追踪路径
- LINK:建立和资源之间的联系
- UNLINK:断开连接关系
前六个方法比较重要,最常用的还是GET方法和POST方法。
HTTP状态码
- 1XX:信息性状态码,表示接收的请求正在处理
- 100:客户必须继续发出请求
- 101:客户要求服务器根据请求转换HTTP协议版本
- 2XX:成功状态码,表示请求正常处理完毕
- 200:OK,请求已正常处理
- 204:No Content,请求处理成功,但没有任何资源可以返回给客户端。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
- 206:Partial Content,是对资源某一部分的请求,该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。
- 3XX:重定向状态码,表示需要进行附加操作以完成请求
- 301:Moved Permanently,资源的URL已更新,你也要更新你的书签引用。
永久性重定向
,请求的资源已经被分配了新的URL,以后应使用资源现在所指的URL。 - 302:Found,资源的URL已临时定位到其他位置了,暂时算你已经知道了这个情况了。
临时性重定向
。和301相似,但302代表的资源不是永久性移动,只是临时性性质的。换句话说,已移动的资源对应的URL将来还有可能发生改变。 - 303:See Other,资源的URL已更新,你是否能临时按新的URL访问。该状态码表示由于请求对应的资源存在着另一个URL,应使用GET方法定向获取请求的资源。303状态码和302状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源。
当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体,之后请求会自动再次发送。 - 304:Not Modified,资源已找到,但未符合条件请求。该状态码表示客户端发送附带条件的请求时(采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部)服务端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304.。
- 307:Temporary Redirect,临时重定向。与302有相同的含义。
- 301:Moved Permanently,资源的URL已更新,你也要更新你的书签引用。
- 4XX:客户端错误状态码,表示服务器无法处理请求
- 400:Bad Request,服务器端无法理解客户端发送的请求,请求报文中可能存在语法错误。
- 401:Unauthorized,该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。
- 403:Forbidden,不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)
- 404:Not Found,服务器上没有请求的资源。路径错误等。
- 5XX:服务器错误状态码,表示服务器处理器请求出错
- 500:Internal Server Error,内部资源出故障。该状态码表明服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障。
- 503:Service Unavailable,该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求。
- 504:Gateway TimeOut,网关超时,一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。
HTTP常见Header
- Content-Type:数据类型(text/html等)
- Content-Length:Body的长度
- Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
- User-Agent:声明用户的操作系统和浏览器版本信息
- refer:当前页面是从哪个页面跳转过来的
- location:重定向,搭配3XX状态码使用,告诉客户端接下来要去哪里访问
- Cookie:用于在客户端存储少量信息,通常用于实现会话功能。
补充:
重定向方式有两种:临时重定向和永久重定向。
HTTP与HTTPS的区别
1、HTTP没有加密机制,不安全,HTTPS对传输的数据进行加密,安全
2、HTTP在应用层,HTTPS在传输层
3、HTTP端口号80,HTTPS端口443
4、HTTP不需要证书,HTTPS需要CA机构的一个证书