HTTP概念
HTTP协议用于客户端与服务端之间的通信(应用HTTP协议,必定有一端是客户端,另一端是服务器端)
通过请求和响应的交换达成通信(必须由客户端发起通信,服务器端在没有接收到请求之前不会发送响应)
发送报文的结构:
//包含了请求方法、请求资源路径、HTTP协议版本
GET(POST) /mini.png HTTP/1.1
//请求首部字段
Host:120.25.226.186:32812 客户端想访问的服务器主机地址
User-Agent:Mozilla/5.0 客户端的类型,客户端的软件环境
Accept:text/html 客户端所能接收的数据类型
Accept-Language:zh-cn 客户端的语言环境
Accept-Encoding:gzip 客户端支持的数据压缩格式
//内容实体
name=user&ag=12
响应报文的结构:
//包含了HTTP协议版本、状态码、状态码的原因说明
HTTP/1.1 200 ok
//响应首部字段
Server:Apache-Coyote/1.1 服务器类型
Content-Type:image/jpeg 返回数据的类型
Content-Length:56811 返回数据的长度
Date:Mon,23,Jun 2014 12:54:52 GMT 响应的时间
//主体
data....
HTTP是不保存状态的协议(协议本身不会保留之前一切的请求或响应)
请求URI定位资源
发起HTTP请求的方法
GET:获取资源
客户端—-GET(访问某个资源)—–>服务器POST:发给服务器的参数全部放在请求体中
客户端—-POST(上传某个信息)—–>服务器PUT:传输文件(PUT自身不带验证机制,任何人都可以传,不安全)
客户端—-PUT(上传一个文件)—–>服务器HEAD:获得报文首部(不返回主体部分,只返回响应的首部)
客户端—-HEAD(把那个相关信息告诉我)—–>服务器DELETE:删除文件(与PUT相反,不安全)
客户端—-HEAD(把那个文件删除)—–>服务器OPTIONS:询问支持的方法(查询对请求URI指定资源支持的方法)
客户端—-OPTIONS(这个资源支持哪些方法访问)—–>服务器扫描二维码关注公众号,回复: 3219570 查看本文章
持久连接节省通信量(建立1次TCP连接后可进行多次请求和响应)
- 持久性连接的特点:只要任意一端没有明确提出断开,则保持TCP的连接
- 管线化方式:所谓的管线化方式是指同时并行发送多个请求,而不需要一个接一个地等待响应
使用Cookie的状态管理
- Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态
- Cookie会根据从服务器端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie,当下次客户端再次请求时,客户端会自动在请求的报文中加入Cookie值发送出去
- 服务器端发现客户端发来的Cookie时,会去检查是哪一个客户端发送的请求,对比服务器上的记录,最后得到之前的状态信息
(1)请求报文(没有Cookie)信息的状态
GET /mini.png HTTP/1.1
Host:120.25.226.186:32812
*首部字段内没有Cookie的相关信息
(2)响应报文(服务器端生成Cookie信息)
HTTP/1.1 200 ok
Date:Mon,23,Jun 2018 12:54:52 GMT
Server:Apache
<Set-Cookie:sid=123123123; path=/;expires=Wed,=>Jun 2018 12:54:52 GMT>
Content-Type:image/jpeg
(3)请求报文(自动发送保存着的Cookie信息)
GET /mini.png HTTP/1.1
Host:120.25.226.186:32812
Cookie:sid=123123123
HTTP返回结果的状态码
状态码 | 类别 | 原因短语 | 备注 |
---|---|---|---|
200 | 成功状态码 | OK | |
204 | 成功状态码 | NO Content | 请求成功但是没有资源可返回 |
206 | 成功状态码 | Partial Content | 对资源某一部分的请求 |
301 | 重定向状态码 | Moved Permanently | 资源的URI不对 |
302 | 重定向状态码 | Found | 临时重定向 |
303 | 重定向状态码 | See Other | 资源存在多个URI,应使用GET方法请求 |
304 | 重定向状态码 | Not Modified | 资源已找到,但未符合条件 |
307 | 重定向状态码 | Temporary Redirect | 临时重定向 |
400 | 客户端错误 | Bad Request | 请求报文中语法不对 |
401 | 客户端错误 | Unauthorized | 该请求需要HTTP认证 |
403 | 客户端错误 | Forbidden | 不能访问该资源 |
404 | 客户端错误 | Not Found | 服务器上没有该资源 |
500 | 服务器错误 | Internal Server Error | 服务器内部资源不对 |
503 | 服务器错误 | Service Unavailable | 服务器超负荷或停机维护 |
与HTTP协作的web服务器
- 虚拟主机:是指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放和传输功能。
通信数据转发
代理:是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给其他服务器,同时也接受其他服务器返回的响应转发给客户端
- 代理不会改变请求的URI,会直接发送给持有资源的服务器(源服务器)
- 代理服务器转发时,需要附加Via首部字段来标记经过的主机信息
- 缓存代理(常说的镜像):代理服务器转发响应时,缓存代理会预先将资源的副本保存在代理服务器上,当代理服务器再次收到相同资源的请求时,代理服务器可直接将之前缓存的资源作为响应返回
- 透明代理:转发请求会响应时,不对body做任何加工的代理类型叫透明代理,对报文内容做加工的代理叫非透明代理
网关:转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,他就像自己拥有资源的服务器一样对请求进行处理
- 网关能使通信新路上的服务器提供非HTTP协议服务
- 利用网关能够提高通信安全性,可以在客户端与网关之间的通信线路上加密以确保连接安全(比如网关可以关联数据库)
- 网关能使通信新路上的服务器提供非HTTP协议服务
隧道:在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序
- 隧道可按要求建立一条与其他服务器通信的线路,可以使用SSL等加密手进行通信,隧道的目的就是确保客户端能与服务器进行安全的通信
- 隧道本身不对HTTP做任何解析,保持原样中转给服务器