HTTP协议详解

·HTTP是整个Web的基础,是客户端和服务器端协同工作的基石。要想了解Web的工作原理,优化Web应用,就要完全理解http协议。

1、HTTP协议详解

简单来说,HTTP就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范——HTTP协议。HTTP协议从WWW服务器传输超文本到本地浏览器,可以让浏览器更加高效。HTTP协议不仅保证计算机正确快速地传输超文本文档,还能确定传输文档中的哪一个部分,以及哪部分内容首先显示(如文本或图形)等。

HTTP协议通常承载于TCP协议之上,有时也承载于TLS协议(安全传输层协议)或SSL(安全套接层协议)之上,这时候,就成了常说的HTTPS。默认HTTP协议的端口号为80,HTTPS的端口号为443。

HTTP协议的模型就是客户端发起请求,服务器回送相应。这种设计属于典型的问答式交互,客户端和服务器端一问一答,使HTTP协议模型格外简单。这种设计也存在问题,比如服务器端不会主动向客户端PUSH,一问一答的轮询方式也会使TCP链接频繁建立和断开,导致其交互效率不高。基于以上缺点,SPDY协议应运而生。

SPDY优化了浏览器和服务器之间的通信,支持流复用,具备优先级的请求、主动发起请求,强制SSL安全传输等先进的特性。

HTTP协议如何工作

HTTP除了应用在Web端,也可以应用在其他方面,只要通信的双方都遵守HTTP协议即可。如迅雷,腾讯QQ等。
HTTP协议是如何工作的呢?
首先,客户端发送一个请求给服务器,服务器在接受到这个请求后将生成一个相应返回给客户端。一次HTTP操作称为一个事务,其工作过程可分为四步:

1、客户机与服务器建立连接。单击某个超链接,HTTP协议的工作开始。
2、建立连接后,客户机发送一个请求给服务器。格式为:前面是URL,中间是协议版本号,后面是MIME信息
3、服务器接收到请求后,给予相应的响应信息。格式为:首先是一个状态行,(包括信息的协议版本号,一个成功或者错误的代码),然后是MIME信息。
4、客户端接收服务器返回的信息并且显示在用户的显示屏上,然后客户机与服务器断开连接。

如果以上的某一部出现错误,产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP协议自己完成是,用户只要用鼠标单击,等待信息显示就可以了。

请求

HTTP请求由三部分组成:请求行、消息报头、请求正文。请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method Request -URI HTTP -Version CRLF

上述格式中各个参数说明如下:
Method:请求方法。
Request-URI:一个统一资源标识符。
HTTP-Version:请求的HTTP协议版本。
CRLF:回车和换行

请求方法有多种:
GET:请求获取Request-URI所标识的资源。
POST:在Request-URI所标识的资源后附加新的数据。
HEAD:请求获取由Request-URI所标识的资源的响应消息报头。
PUT:请求服务器存储一个资源,并用Request-URI作为其标识。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:请求服务器回送收到的请求信息,用于测试或者诊断。
CONNECT:保留以备将来使用。

响应

在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也是由三个部分组成,分别是:状态行、消息报头和响应正文。状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Version 表示服务器 HTTP 协议的版本
Status-Code 表示服务器发回的响应代码
Reason-Phrase 表示状态代码的文本描述
CRLF 表示回车换行。例如:

HTTP/1.1 200 OK (CRLF)

状态代码与状态描述
状态代码由 3 位数字组成, 表示请求是否被理解或被满足,状态描述给出了关于状态码的简短的文字描述。状态码的第一个数字定义了响应类别,后面两位数字没有具体分类。第一个数字有 5 种取值,如下所示。

1xx:指示信息——表示请求已经接受,继续处理
2xx:成功——表示请求已经被成功接收、理解、接受。
3xx:重定向——要完成请求必须进行更进一步的操作
4xx:客户端错误——请求有语法错误或请求无法实现
5xx:服务器端错误——服务器未能实现合法的请求。

常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

目 录 译者序 前言 第1章 概述 1 1.1 引言 1 1.2 分层 1 1.3 TCP/IP的分层 4 1.4 互联网的地址 5 1.5 域名系统 6 1.6 封装 6 1.7 分用 8 1.8 客户-服务器模型 8 1.9 端口号 9 1.10 标准化过程 10 1.11 RFC 10 1.12 标准的简单服务 11 1.13 互联网 12 1.14 实现 12 1.15 应用编程接口 12 1.16 测试网络 13 1.17 小结 13 第2章 链路层 15 2.1 引言 15 2.2 以太网和IEEE 802封装 15 2.3 尾部封装 17 2.4 SLIP:串行线路IP 17 2.5 压缩的SLIP 18 2.6 PPP:点对点协议 18 2.7 环回接口 20 2.8 最大传输单元MTU 21 2.9 路径MTU 21 2.10 串行线路吞吐量计算 21 2.11 小结 22 第3章 IP:网际协议 24 3.1 引言 24 3.2 IP首部 24 3.3 IP路由选择 27 3.4 子网寻址 30 3.5 子网掩码 32 3.6 特殊情况的IP地址 33 3.7 一个子网的例子 33 3.8 ifconfig命令 35 3.9 netstat命令 36 3.10 IP的未来 36 3.11 小结 37 第4章 ARP:地址解析协议 38 4.1 引言 38 4.2 一个例子 38 4.3 ARP高速缓存 40 4.4 ARP的分组格式 40 4.5 ARP举例 41 4.5.1 一般的例子 41 4.5.2 对不存在主机的ARP请求 42 4.5.3 ARP高速缓存超时设置 43 4.6 ARP代理 43 4.7 免费ARP 45 4.8 arp命令 45 4.9 小结 46 第5章 RARP:逆地址解析协议 47 5.1 引言 47 5.2 RARP的分组格式 47 5.3 RARP举例 47 5.4 RARP服务器的设计 48 5.4.1 作为用户进程的RARP服务器 49 5.4.2 每个网络有多个RARP服务器 49 5.5 小结 49 第6章 ICMP:Internet控制报文协议 50 6.1 引言 50 6.2 ICMP报文的类型 50 6.3 ICMP地址掩码请求与应答 52 6.4 ICMP时间戳请求与应答 53 6.4.1 举例 54 6.4.2 另一种方法 55 6.5 ICMP端口不可达差错 56 6.6 ICMP报文的4.4BSD处理 59 6.7 小结 60 第7章 Ping程序 61 7.1 引言 61 7.2 Ping程序 61 7.2.1 LAN输出 62 7.2.2 WAN输出 63 7.2.3 线路SLIP链接 64 7.2.4 拨号SLIP链路 65 7.3 IP记录路由选项 65 7.3.1 通常的例子 66 7.3.2 异常的输出 68 7.4 IP时间戳选项 69 7.5 小结 70 第8章 Traceroute程序 71 8.1 引言 71 8.2 Traceroute 程序的操作 71 8.3 局域网输出 72 8.4 广域网输出 75 8.5 IP源站选路选项 76 8.5.1 宽松的源站选路的traceroute 程序示例 78 8.5.2 严格的源站选路的traceroute 程序示例 79 8.5.3 宽松的源站选路traceroute程序 的往返路由 80 8.6 小结 81 第9章 IP选路 83 9.1 引言 83 9.2 选路的原理 84 9.2.1 简单路由表 84 9.2.2 初始化路由表 86 9.2.3 较复杂的路由表 87 9.2.4 没有到达目的地的路由 87 9.3 ICMP主机与网络不可达差错 88 9.4 转发或不转发 89 9.5 ICMP重定向差错 89 9.5.1 一个例子 90 9.5.2 更多的细节 91 9.6 ICMP路由器发现报文 92 9.6.1 路由器操作 93 9.6.2 主机操作 93 9.6.3 实现 93 9.7 小结 94 第10章 动态选路协议 95 10.1 引言 95 10.2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值