一.HTTP原理
通过学习TCP/IP协议我们已经能实现从A到B的通信,然而我们还需要一层协议,不关心通信细节,只关心应用细节.这就是应用层协议,不同场景下使用的应用层协议是有不同种类的.其中HTTP就是其中之一.常见的网页都是html构成的,而要把网页信息通过网络传送到客户端,或者用户数据上传到服务器,就需要HTTP协议.
1.URL
(1)域名的方式:http://域名/服务路径?k1=v1&k2=v2
(2)IP的方式:http://ip:port/服务路劲?k1=v1&k2=v2
2.HTTP协议格式
请求行
由三部分组成,分别为:[方法]+[URL]+[版本],之间由空格分隔
请求头部
请求头部为请求报文添加了一些附加信息,由"键/值"对组成,每对一行,键值之间使用冒号分隔开.遇到空行表示Header部分结束.这一行很重要,必不可少.
常见请求头如下:
请求头 | 说明 |
---|---|
Host | 客户端告知服务器,所请求的资源在那个主机的那个端口上 |
User-agent | 发送请求的应用程序名称 |
Content-Type | 数据类型(text/html) |
Content-Length | Body的长度 |
Referer | 当前页面是从那个页面跳转过来的 |
location | 搭配3XX状态码使用,告诉客户端接下来要去哪里访问 |
Cookie | 用于在客户端存储少量信息,通常用于实现会话(Session)的功能 |
请求正文
Body允许为空字符串.如果Body存在.则在Header中会有一个Content-Length属性来标识Body的长度.
状态行
由三部分组成,分别是:版本协议,状态码,状态描述.之间由空格分隔
状态代码为3位数字,
100~199的状态码是信息性状态码,就收的请求正在处理.
200~299的状态码表示成功,请求正常处理完毕.
300~399的状态码指重定向,需要进行附加操作以完成请求.
400~499的状态码指客户端请求出错,服务器无法处理请求
500~599的状态码指服务端出错.服务器处理请求出错.
响应头部
与请求头部类似,为响应报文添加了一些附加信息
3.HTTP 方法
方法 | 说明 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
HEAD | 获得报文首部 |
TRACE | 追踪路径 |
二.session和cookie
Http是一个无状态协议,就是说这一次请求和上一次请求时没有任何关系的,互不认识的.没有关联的.这种无状态的好处是快速.坏处时需要进行用户状态保持,必须使用一些方式或者手段:session和Cookie
2.1Cookie
设置cookie的 方法在HTTP的Response报头中可以携带Set-Cookie字段来完成.
2.2session
2.3两者区别
- cookie以文本文件的格式存储在浏览器中,而session存储在服务端
- 因为每次发起Http请求,都要携带有效Cookie信息,所以Cookie一般都有大小限制,以防止增加网络压力,一般不超过4K
- 可以轻松访问cookie值但是我们无法轻松访问会话值,因此session方案更安全.
2.4本地禁止cookie
从上面可以看出,要使用session,其实还是需要使用cookie机制来保存session id的,那么万一在客户端cookie机制被禁掉了,那么session貌似也就无法使用了?替代方法是有的.经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后边.还有一种技术叫做表单隐藏字段.就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递给服务器.