常见的应用层协议
应用 | 协议 | 支持的传输层协议 |
---|---|---|
电子邮件 | SMTP | TCP |
远程终端访问 | Telnet | TCP |
Web | HTTP | TCP |
文件传输 | FTP | TCP |
流式多媒体 | HTTP | TCP |
网络电话 | RTP/SIP | UDP |
域名解析 | DNS | UDP |
HTTP: HyperText Transfer Protocol 超文本传输协议
HTTP由两个程序实现:客户端和服务端。客户端和服务端通过交换HTTP报文进行会话。
HTTP使用TCP作为它的职称传输协议(而不是UDP)。
一端程序通过Socket接口发送HTTP报文给另一端,并从Socket接口中接受响应报文。
TCP为HTTP提供可靠的数据传输服务,我们不需要担心数据丢失,也不用担心乱序。
我们短时间多次向服务器请求同一个对象,服务端不会因为已经给客户端下发过该对象就不再做出反应。根据这种特性,我们称HTTP为无状态协议。
HTTP请求报文格式
在HTTP/1.1协议中,定义了8种请求方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
HTTP Request Sample
HTTP响应报文格式
Status Code代表了响应码,一般响应码对应如下:
HTTP Response Sample
URI,Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源
URI一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。
URL,Uniform Resource Locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
从JDK1.5开始,java.net包对URL和URI作了非常明确的区分。
URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。
以下面这个URL为例,介绍下普通URL的各部分组成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
从上面的URL可以看出,一个完整的URL包括以下几部分:
持续每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及响应经相同的TCP连接发送,被称为非持续连接或持续连接。
Connection: Keep-Alive
Http 1.1以后都默认是持续连接的。以前的版本需要手动配置这个请求头,才是持续连接。
启用Keep-Alive模式肯定更高效,性能更高。因为避免了建立/释放连接的开销。但会让Client和Server之间的服务器不断开,即使它们之间没有数据传输。如果使用非常不频繁的时候保持着连接也增加了设备的功耗,所以需要服务端控制好这个链接闲置的时间(timeout),一旦闲置时间超出就立即关闭这个链接。
所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。
比如http,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
通常的短连接操作步骤是:
连接→数据传输→关闭连接;
长连接通常就是:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;
因为HTTP服务器是无状态的。但我们希望某些时候能够与用户相关联,即识别用户身份,那么就需要使用cookie。
Cookie通常也叫做网站cookie,浏览器cookie或者http cookie,是保存在用户浏览器端的,并在发出http请求时会默认携带的一段文本片段。它可以用来做用户认证,服务器校验等通过文本数据可以处理的问题。
Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server。同时在浏览器允许脚本执行的情况下,Cookie是可以被JavaScript等脚本设置的。
Cookie不是软件,所以它不能被携带病毒,不能执行恶意脚本,不能在用户主机上安装恶意软件。但它们可以被间谍软件用来跟踪用户的浏览行为。所以近年来,已经有是欧洲和美国的一些律师以保护用户隐私之名对cookie的种植宣战了。更严重的是,黑客可以通过偷取Cookie获取受害者的帐号控制权。
同时请求379张图片的耗时对比
相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化:
二进制分帧:HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。 HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
头部压缩:HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。
多路复用:直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。当流并发时,就会涉及到流的优先级和依赖。优先级高的流会被优先发送。
Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。
HTTP/2 主要是 HTTP/1.x 在底层传输机制上的完全重构,HTTP/2 是基本兼容 HTTP/1.x 的语义的
FTP:File Transfer Protocol 文件传输协议
FTP比较显著的特征是使用了两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接。
FTP服务器在整个绘画期间保留用户的状态。
SMTP:Simple Mail Transfer Protocol 简单邮件传输协议
SMTP用于从发送方的邮件服务器发送报文到接收方的邮件服务器。它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
IMAP:Internet Mail Access Protocol Internet邮件访问协议
它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等
POP3:Post Office Protocol - Version 3 第三版邮局协议
它主要用于支持使用客户端远程管理在服务器上的电子邮件。
DNS:Domain Name System 域名系统
DNS作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。