HTTP协议详解
重要性:
无论是以后用WebSevice,还是用rest做大型架构,都离不开对HTTP协议的认识。
甚至可以简化的说:WebService = Http协议 + XML
Rest = Http协议 + XML/json实现的
各种的Api一般也是用Http + XML/json来实现的。
学习了HTTP协议之后也会方便Ajax的学习。
学习内容:
一、原理
- 形象理解Http协议
- 动手试试Http协议
- Http协议三部分介绍
二、实战
- PHP + socket编程发送http请求
- PHP批量发帖
- Http协议的防盗链
三、优化
- Http协议与缓存控制
- Http协议与Cookie
- 持久链接
学习内容:
一、原理
A. 形象理解Http协议
1) Http协议的定义:
计算机协议和现实的协议是一样的,双方多方都遵循这一个共同的规范,这就是协议。计算机可以全世界共通,这些协议功不可没。
HTTP协议就是按照一定的规则,向服务器索要数据/发送数据。服务器安照一定的规则进行回应。
2) Http协议的工作流程
1、原始状态下客户端与服务器没有连接;(连接就是虚拟电路)
2、建立链接发送请求到服务器;
3、服务器沿着建立的连接,返回响应信息。客户端收到响应,并进行解析;
4、断开连接。
3) Http请求信息和响应信息的格式
1、请求信息:
请求行; 请求头信息; (换行) 请求主体信息(可无)
!!换行用来分开请求/响应头信息和请求/响应主体信息虽主体信息可有可无,但此空行一定要有。
请求行分为三部分:
请求方法、请求路径(URL)、所用的协议。
请求方法包括:GET POST HEAD PUT DELETE TRACE OPTIONS
请求路径就是URL的一部分
请求头信息格式:
KEY:VALUE
KEY:VALUE
………………
Contente-length:接下来的主体长度
Contente-type:接下来的主体类型
2、响应信息:
响应行
响应头信息
(换行)
响应主体信息
!!换行用来分开请求/响应头信息和请求/响应主体信息虽主体信息可有可无,但此空行一定要有。
响应主体信息可以是HTML或者其他内容
响应行分为三部分:
协议 状态码 状态文字信息
状态文字信息是像‘ok’这样
响应头信息格式:
KEY:VALUE
KEY:VALUE
………………
例如:HTTP/1.1 200 OK
Contente-type:text/html
Contente-length:5
4) 请求方法
GET POST HEAD PUT DELETE TRACE OPTIONS
(注意要大写
(注意:这些请求方法虽然Http协议里规定了,但可能有Web Service不支持这些方法。)
1、HEAD与GET方法基本一致,只是不返回内容
2、POST的请求方法
因为POST比GET多了主体信息
所以要在请求头信息里表明主体信息的长度content-length
还要标明主体信息的类型content-type:application/x-www-form-urlencoded
GET和POST的区别在于GET请求没法传数据,只能单纯的读取一个接口提供的资源
而PSOT可以传输一定的数据到后台并进行一定的操作。
3、TRACE应用情况:
比如用了代理上网,想查看代理有没有修改Http请求,这种情况就可以用到TRACE,服务器回把最后收到的请求返回给客户端。
4、OPTIONS:
返回服务器可用的请求方法。
5) 状态码和状态文字
状态码用来反映服务器的响应情况
状态文字用来描述状态码的
常见的有:
200 OK:服务器正常返回网页
301/2:永久/临时重定向 (可能会在重定向过程中丢失数据,比如POST可能会变成GET导致数据丢失)
304 Not Modified:未修改(请求的内容未修改,告诉客户端到缓存里取
307 Temporay Redirect:在重定向中保持原有数据
失败的状态码-
404 NOT FOUND:请求的网页不存在
500:服务器内部错误
503:服务器暂时不可用
状态码 定义 说明
1XX 信息 收到请求,继续处理
2XX 成功 操作成功收到、理解、接受
3XX 重定向 为了完成请求,必需采取进一步措施
4XX 客户端错误 请求的语法有明显错误或不能完全被满足
5XX 服务端错误 服务器无法完成明显有效的请求
B. 动手试试Http协议
C. Http协议三部分介绍
二、实战
A. PHP + socket编程发送http请求
B. PHP批量发帖
C. Http协议的防盗链
三、优化
A. Http协议与缓存控制
B. Http协议与Cookie
C. 持久链接