应用层
进程通过套接字向网络收发报文,套接字是应用层和运输层的接口。
IP地址标识主机,端口号标识进程。Web服务器的端口号为80,SMTP的端口号为25。
HTTP
Web的应用层协议是超文本传输协议(HTTP)
客户端通过套接字接口发送HTTP请求报文,并从套接字接口接收HTTP响应报文。
服务端不存储任何客户端的信息,即客户几秒内连续请求同一服务端数据,每次都会反馈,是一个无状态协议。
非持续连接:每个请求/响应经一个单独TCP发送
持续连接:所有请求/响应经由相同的TCP发送
HTTP默认为持续连接,但也可以配置为非持续连接。
HTTP报文格式
GET /somedir/page.html HTTP/1.1 //HTTP请求报文
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
(data data data data data ...)
第一行为请求行
方法字段
URL字段
HTTP版本字段
第二行至第五行为首部行
Host:主机名;
Connection:表示不使用持续连接,请求完毕就关闭连接;
User-agent:指明用户代理,即向服务器发送请求的浏览器类型,如Mozilla/5.0就是Firefox浏览器;
Accept-language:表示希望得到的语言版本,如fr为法语。
第六行为实体体,GET方法的实体体为空,POST方法会在实体体放入表单,当然使用GET也可以在URL后拼接
? name & year
实现表单请求。
其余方法字段:
* HEAD方法类似于GET方法,服务端收到HEAD请求时将会用一个HTTP报文响应但并不返回,更多地是作为调试跟踪之用。
PUT方法常与Web发行工具联合使用,允许用户上传对象到指定的Web服务器上指定的目录。
DELETE方法允许用户删除Web服务器上的对象。
HTTP/1.1 200 OK //HTTP响应报文
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
第一行为状态行
协议版本字段
状态码
状态信息
第二行至第八行为首部行
Connection:同请求报文,发送完成后关闭TCP连接
Date:发送该响应报文的日期时间
- Server:表明该报文由一台Apache Web服务器产生
- Last-Modified:最后修改时间,与下文中Web缓存器协同使用
- Content-Length:被发送对象的字节数
- Content-Type:表明实体体中的对象是HTML文本
第九行为实体体
常见响应状态码:
* 200 OK:请求成功
* 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location首部行中
* 304 Not Modified:请求内容未被修改
* 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解
* 404 Not Found:被请求的文档不在服务器上
* 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本<