HTTP
HTTP无状态协议,是指协议对于交互性场景没有记忆能力。
- 当同一个浏览器再次给你服务器发送请求的时候,服务器并不知道它就是刚才那个浏览器。简单的说,服务器不会记得你,所以就是无状态协议。
HTTP请求报文与响应报文格式
请求报文包含四部分:
- 请求行:包含请求方法、URI、HTTP版本信息
- 请求首部字段
- 空行
- 空行请求内容实体
响应报文包含四部分:
- 状态行:包含HTTP版本、状态码、状态码的原因短语
- 响应首部字段
- 空行
- 响应内容实体
常见的首部:
- 通用首部字段(请求报文与响应报文都会使用的首部字段)
- Date:创建报文时间
- Connection:连接的管理
- Cache-Control:缓存的控制
- Transfer-Encoding:报文主体的传输编码方式
- 请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
- Accept:可处理的媒体类型
- Accept-Charset:可接收的字符集
- Accept-Encoding:可接受的内容编码
- Accept-Language:可接受的自然语言
- 响应首部字段(响应报文会使用的首部字段)
- Accept-Ranges:可接受的字节范围
- Location:令客户端重新定向到的URI
- Server:HTTP服务器的安装信息
- 实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
- Allow:资源可支持的HTTP方法
- Content-Type:实体主类的类型
- Content-Encoding:实体主体适用的编码方式
- Content-Language:实体主体的自然语言
- Content-Length:实体主体的的字节数
- Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
常见的HTTP相应状态码
- 200:请求被正常处理
- 204:请求被受理但没有资源可以返回
- 206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
- 301:永久性重定向
- 302:临时重定向
- 303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
- 304:发送附带条件的请求时,条件不满足时返回,与重定向无关
- 307:临时重定向,与302类似,只是强制要求使用POST方法
- 400:请求报文语法有误,服务器无法识别
- 401:请求需要认证
- 403:请求的对应资源禁止被访问
- 404:服务器无法找到对应资源
- 500:服务器内部错误
- 503:服务器正忙
HTTPS简介
HTTPS是安全的HTTP通道,即在HTTP通信中加入了SSL层(当前版本是TLS1.2),通信的数据被加密了,防止被窃取,具体的通信流程如下:
HTTPS使用的加密方式结合了对称加密和不对称加密的特点,在保证安全的情况下,又提高了传输效率。
HTTP和HTTPS的区别如下:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http的信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https用的端口不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
关于Get和Post的区别
- Get是从服务器上获得数据,而Post则是向服务器传递数据的。
- Get是不安全的,很可能你的一些操作会被第三方看到,而Post的所有操作多用户来说是不可见的。
- Get传输的数据量小,主要是因为它受约于URL长度的限制,而Post可以传输大量的数据,所以我们在传文件的时候会用Post。
- Get限制From表单的数据集的值必须为ASCLL字符,而Post支持整个ISO10646字符集。
Cookie和Session的区别
- 存储位置不同
-
cookie的数据信息存放在客户端浏览器上。
-
session的数据信息存放在服务器上。
- 存储容量不同
-
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
-
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
- 存储方式不同
-
cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据。
-
session中能够存储任何类型的数据,包括且不限于string,integer,list,map等。
- 隐私策略不同
-
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
-
session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险。
- 有效期上不同
-
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
-
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
- 服务器压力不同
-
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
-
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
- 跨域支持上不同
-
cookie支持跨域名访问。
-
session不支持跨域名访问。