应用层的功能:
应用层负责应用程序之间的沟通来制定协议,通俗的来讲,就是应用层会借助TCP,UDP协议在各种各样的程序之间传递数据(邮件,文件等)这时候像应用层协议就可以规定这些数据的格式要满足什么样的。
常见的应用层协议:
基于UDP的应用层协议:
- DHCP:动态主机配置协议
- DNS:域名解析协议
基于TCP的应用层协议:
- SMTP:简单电子邮件传输协议
- FTP:文件传输协议
- TELNET:网络远程访问协议
- HTTP:超文本传输协议
HTTP协议
- HTTP叫超文本传输协议,基于请求/响应模式,是用于万维网(WWW)服务器传输超文本到本地浏览器的传送协议
- HTTP协议是基于TCP/IP协议栈的应用层协议,主要规范服务器和客户端之间的通信格式,默认端口号是80
- HTTP协议工作于服务器-客户端架构,浏览器作为HTTP客户端通过URL向HTTP服务器(web)发送请求,web服务器接根据接收到的请求,向客户端响应相应的信息
HTTP过渡到客户端与服务器的交互:
- 当客户端执行网络请求时,会从URL地址中解析出URL的主机名,并将主机地址转化成IP地址
- 从URL解析出服务器使用的端口号
- 客户端用TCP连接服务器
- 连接成功后获得输出流,并将数据以报文的形式传递给服务器
- 当服务器接受到数据之后,进行判断和解析码,并回送一条响应报文
- 客户端从输入流中获取报文,并解析
- 最后关闭网络的连接
HTTP的特点:
- 简单快捷:客户向服务器请求,只需要传送请求方法和路径。请求方法一般有:GET,HEAD,POST。每种方法规定了客户于服务器联系的类型不同。由于HTTP简单,使得HTTP服务器的程序规模小,因而通信速度快
- 灵活:HTTP传输任意类型的数据对象
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输事件
- 无状态:无状态是指协议对事物处理没有记忆能力,缺少状态意味着,如果后面需要前面的信息则需要重传,这样可能导致每次传送的数量巨大,另一方面,服务器不需要先前的信息时,它应答的速度就会特别快
- 支持客户/服务器模式
HTTP请求:
- 首行:方法+url+版本号
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
- Body:空行后面都是Body的内容,Body允许为空字符串,如果Body存在,则Header中会有一个Content—Length属性来标识Body的长度
HTTP常见的请求方式:
- GET请求:
作用:获取服务器的某个资源,或者说是告诉服务器,我想查询的信息
特点:明文传输(直接传送给服务器的数据写在URL上)
常用:跳转到另一个网站,网站名就是GET传输,然后向服务器请求获取该网站
2. POST请求:
作用:传输实体主体,一般用来提交HTML表单时使用,服务器处理这些数据
特点:表单上传(写入数据,不显示在URL上)
常用:注册用户名,密码,传送给服务器处理
3.PUT请求:
作用:传输文件,向服务器写入资源,在服务器创建一个文本,然后将Client传输数据给server,不过一个是写在URL上,一个写在from表单上,然后server端根据这些上传的数据进行处理
HTTP响应:
首行:版本号+状态码+状态码解释
HTTP状态码:
- 1XX:信息性状态码,接受的请求正在处理
- 2XX:成功状态码,请求正常处理完毕
- 3XX:重定向状态码,需要进行附加操作以完成请求
- 4XX:客户端错误状态码,服务器无法处理请求
- 5XX:服务器错误状态吗,服务器处理请求出错
- 常见的错误码:200(ok),404(Not Found),403(Forbidden),302(Redirect,重定向),504(Bad Gatewa)
HTTP常见Header
- Content—Type:数据类型(text/html)
- Conrent—Length:Body的长度
- Host:客户端告知服务器,所请求的资源在哪个主机的哪个端口
- User—Agent:声明用户的操作系统和浏览器版本信息
认识URL
URL:统一资源定位符,我们平时说的“网址”其实就是指URL,具有全球唯一性,它表示一个真正存在的资源。一个完整的URL包括协议类型,主机类型,路径和文件名
实现简单版本的HTTP服务器
此服务器中构造了响应,打印“hello world”