简介
http(Hyper Text Transfer Protocol)超文本传输协议是万维网应用层的协议,使用了面向连接的TCP作为运输层协议。
特征
- 简单快速:通过url就可以访问资源,协议简单,使得HTTP服务器的程序规模小,通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:每次连接响应一个请求,连接一次响应后就会断开连接。
- 无状态:无状态协议,是指对于事务处理没有记忆能力,不会记住客户访问过的状态,不能区分访问身份。
HTTP的工作原理
http协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
- 浏览器向服务器请求解析该URL中的域名所对应的IP地址
- 浏览器通过IP地址与默认监听的80端口,与服务器建立TCP连接
- 服务器对请求资源进行定位,响应给客户端
- 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求(即持久连接)
- 客户端浏览器首先解析状态行、响应头、然后读取响应数据HTML,并在浏览器窗口中显示
请求方法
- GET:获取资源
- POST :传输资源
- HEAD :获得报文首部
- DELETE :删除资源
- PUT:更新资源
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET和POST的区别
- Get比Post方法不安全,参数暴漏在url上,不能用来传递敏感信息Post放在request body中;
- Get在url中可传递的参数长度是有限的,Post方法可以传递的参数长度没有限制;
- Get请求参数会被完整保留在浏览器历史记录里,Post参数不会被保留;浏览器回退,Get请求不会重复提交,Post请求会重复提交;
- Get请求浏览器会自动缓存,Post请求不会自动缓存。
响应状态码
-
1**: 指示信息 -
2**:成功 200 :ok 204:请求被受理但没有资源可以返回 206 :partial content,请求带range头的GET请求,服务器对部分资源处理get请求。 -
3**:重定向301 :永久重定向 302:临时重定向 303:希望客户端能以get方法重定向到另一个uri上去,和302相似。304 Not modified:客户端发出了一个条件性的请求,服务器会从缓存中进行比对,如果未更新过那么他会给你返回一个304状态码,比如配置Etag。307:要求使用post方法的临时重定向 -
4**:客户端错误 400:客户端语法错误 401:请求需要认证 403:对应资源禁止访问 404:没找到资源 -
5**:服务器错误 500:服务器内部错误 503:服务器忙。
|