HTTP
从输入url到显示主页的过程
参考:segmentfault.com/a/119000000…
- DNS解析:网址到ip地址的转换
- TCP连接: HTTP协议使用TCP作为传输层协议
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
HTTP和HTTPS的区别
HTTP报文是包裹在TCP报文中发送的,服务器端收到TCP报文时会解包提取出HTTP报文。但是HTTP报文是明文,如果中间被截取的话会存在一些信息泄露的风险。
HTTPS协议的本质就是HTTP + SSL(or TLS)。在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。
HTTPS在传输数据之前需要客户端与服务器进行一个握手(TLS/SSL握手),在握手过程中将确立双方加密传输数据的密码信息(第二次握手服务器会发送一个SSL证书,客户端对其验证)。
TLS/SSL使用了非对称加密、对称加密以及hash等。具体过程请参考经典的阮一峰先生的博客TLS/SSL握手过程。
SSL加密过程: 需要注意的是非对称加解密算法的效率要比对称加解密要低的多。 所以SSL在握手过程中使用非对称密码算法来协商密钥,实际使用对称加解密的方法对http内容加密传输。
Https的好处
- 所有信息都是加密传播,黑客无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
缺点
- SSL证书维护麻烦。
- 握手次数增加,降低访问速度。
- Http跳转到Https的方式增加了用户访问耗时。
- Https涉及的算法会消耗CPU资源。
常见的状态码
-
200 ok 服务器已成功处理了请求并提供了请求的网页
-
202 Accepted 已经接受请求,但处理尚未完成
-
204 No Content 没有新文档,浏览器应该继续显示原来的文档
-
206 Partial Content 客户端进行了范围请求(实现断点续传)
-
301 Moved Permanently 永久性重定向
-
302(或307) 临时性重定向
-
304 Not Modified 未修改,自从上次请求后,请求的内容未修改过
-
401 未经授权
-
403 Forbidden 服务器拒绝请求
-
404 Not Found 服务器不存在客户端所请求的资源
500 服务器遇到一个错误,使其无法请求提供服务
HTTP长连接、短连接
HTTP 2.0
问题
GET 与 POST 比较:作用、参数、安全性、幂等性、可缓存。
HTTP 状态码
Cookie和Session
什么是Cookie和Session
Sesssion在服务端生成,存在客户端。客户端访问某个地址时,服务器会根据页面的头部信息生成coolkie(字符串),然后cookie会加在http响应头中,发往客户端并保存在浏览器。在下次客户端请求时,请求中会附带存储的Cookie。
Session 是在服务器端生成的,存储在服务器端,即存在内存中。可以对生成的 Session 设置过期时间,如果不设置过期时间,默认的 Session 过期时间是30 分钟。但是,Sesssion 的生成的同时,会生成一个与之相关联的的 SessionID ,此SessionID的存储是需要 Cookie来完成的。SessionID 是以名称为 JSESSIONID,其值应该是一个既不会重复,又不容易被找到规律以仿造的字符串。SessionID会随着此次Http响应,一并返回到客户端,并保存在客户端中(Cookie)。到当前请求再次发出后,该 SessionID会随着 Http 头部,传到服务器中,服务器依据当前 SessionID 得到与之对应的 Session.
注意:一个域,在客户端建立的所有的Cookie都是可以共享的,只要 Cookie 没有过期。
为什么需要cookie和Seesion
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。Cookie和Session的出现就是为了解决这个问题。
- Cookie使用场景:有些网站有记住用户名的功能,当你勾这个的时候,下次进入该网站时,就会保存上一次登录的用户名
- Seesion使用场景:利用Seesion来验证用户是否已登录,利用Session来保存验证码。
Cookie和Session的区别
- Cookie是存在客户端,Session存在服务器
- 安全性要求高的用Session,要求低用Cookie
- Cookie只能存储字符串,Session可以存储任何信息
- Cookie如果不设置时间,当关闭浏览器时,Cookie就失效,不会在本地保存;Session的生命周期是一个会话(当启动浏览器到关闭浏览器)
- 在存储相对持久的信息时,应考虑使用 Cookie,因为 Cookie 可以以文件的形式,存储在客户端。在进行一些登录的验证及信息拦截的时候,可以使用 Session。
参见:www.cnblogs.com/xiaoshitout…
cookie和session结合使用
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:
- 存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
- 将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。
参见博客:www.cnblogs.com/xxtalhr/p/9…
如何客户端禁用了Cookie,如何存储用户的信息
如果客户端禁用了 Cookie 的话,很多网站任然可以存储用户的信息。一种处理的方式是URL 重写,将 SesseionID 直接附加在请求地址的后面。另一种处理的方式是,使用隐藏自动的方式。就是服务器自动的在表单中,添加一个隐藏字段,以便在表单提交时,将 SesseionID 一起传到服务器,进行识别。
Session的问题
- session是存在服务器的内存中的,如果session过多会影响服务器的性能
- session只在一台服务器里,当有多台服务器的时候,访问别的服务器肯定会失败(需考虑Session共享)