参考文章:应用层
HTTP像是FTP和SMTP协议的结合。只使用TCP连接,但没有控制连接和数据连接这种ftp分开的连接。在c,s之间仅仅有数据连接通道。这点类似SMTP协议。而且HTTP传输数据很类似MIME格式。
client发送请求就像SMTP中的用户发邮件,
server回送响应就像SMTP中的回复邮件。
传输的信息以类MIME形式借助TCP连接传输。
过程
- 浏览器和服务器建立TCP连接
- 浏览器向服务器发出HTTP请求,指定要传输的页面。
- 服务器响应,包括状态码和页面文档。
- 浏览器断开TCP连接。
HTTP信息
- request
- response
请求信息
- 请求行:定义了请求类型/方法(GET,POST,PUT,HEAD),请求资源(URL),HTTP版本
请求方法:
GET:客户端想要从服务器端查找一个文档(查看)
文档地址在URL中被给出。
POST:客户端想要请求为服务器端提供一些信息(增)
PUT:覆盖服务器端指定文档的内容(改)
HEAD:同GET但是只想要server的信息,不想要文档内容(没有body) - headers
- 空白行
- body(数据)
响应信息
- 状态行(status line):定义了响应数据的状态:HTTP版本+状态码(类似FTP,SMTP 200 ok 404 not found)+状态短语
- headers
用于交换client和server的额外信息
header_name:空格 header_value
有三个
- general headers
给出信息的一般情况(时间,cache控制,连接,MIME版本,更新信息)
- request/response headers
(以request headers为例:user-agent(标识客户软件(浏览器)),from(显示用户的email地址信息),accept(接收数据的类型,譬如Img/gif,* / *)等)
- entity headers
给出文档大致信息
- 空白行
- body
浏览器架构
控制器:HTTP,FTP,TELNET,SMTP…
解释器:HTML(超文本内容,音视频图像-----解码器—>浏览器可打开的二进制文件),JAVA
驱动:解释器的输出经过驱动处理可以显示。
工作过程
客户端(浏览器程序)-----tcp连接-------Server服务器程序
其中HTTP使用这条tcp连接,Server端的端口为80(default‘’)
- 浏览器分析URL
- 浏览器向DNS请求解析域名的IP地址
- DNS解析出IP,浏览器建立与服务器的TCP连接(IP:80)
- 浏览器发出GET请求
GET /protocols/HTTP-NG/index.html
- 服务器给出响应,将文件发回给浏览器
- TCP连接释放
- 浏览器渲染完毕,显示文档
超文本:只包含文本
超媒体:可以包含图片,音视频
信息被存放在文档集合里,他们彼此使用指针相互连接,这就是超文本环境。
<a href = " "> xxx </a>
高速缓存
当我们多次请求一个服务器上的同一个文件(譬如是一个视频),频繁请求浪费带宽而且效率低。高速缓存相当于是一个独立的服务器(类似FTP服务器,邮件服务器,当做一个浏览器缓存服务器)。在PC要访问远端server的文档时,先去高速缓存里寻找是否有这个文档。(此时高速缓存是server,PC是client)如果有,直接返回给PC。如果没有高速缓存(作为clinet)向Server发出请求,建立起TCP连接,然后访问文档,返回给client的PC。
web文档类型
- 静态:创建时就固定文档内容(只能获得副本,不会被修改)
- 动态:当浏览器请求文档时,server端的应用程序运行,文档才会被创建。(根据浏览器提供的参数可能不同,生成的文档也不同)
- active活动文档(不在server上运行):client需要一个程序可以在client本地运行。这种发个程序,就是active文档。以bytecode的形式,发送的是程序的拷贝。