asp.net有个大佬,httpcontext(在.net core中依然是它)http请求的上下文,任何一个环节都是需要httpcontext的,需要的参数信息,处理的中间结果,最终的结果,都是放在httpcontext,是一个贯穿全局的对象。

所谓的六大对象,其实就是httpcontext的属性

1、request

  url参数,form参数,url地址,urlrefer,content-encoding,就是http请求提供的各种信息,后台里面都是可以拿到的context.request.headers[“user-agent”],包括自定义的basicayth,请求信息的解读是asp.net_isapi按照http协议解析出来的

2、response

  响应,response.write,各种result扩展就是序列化+response,所谓response都是给客户端响应内容,出了body(json/html/file),其实还有很多东西,各种header,反正都是交给浏览器去用的

3、application

  全局的东西,多个用户共享的,技术—统计下网站的请求书

4、server 

  也就是个帮助类库

5、cookie

  用户登录验证,登录时写入,验证时获取,保存用户数据(记住账号;购物车,现在不放cookie里面了;访问过哪几个页面),一个用户一个cookie,也是字典式的。

  存在客户端,不能有敏感信息,推荐加密,每次请求的时候,都会提交,不能太大,可以存浏览器,没有指定expiretime,关闭浏览器就丢失了,想存在硬盘就指定expiretime,想清空就修改有效期。同一个浏览器登录覆盖问题,一个浏览器cookie只有一个地方存储。可以使用谷歌浏览器的无痕模式,是不存cookie的。

6、session

  用户登录验证时,登录时写入,验证时获取,验证码,跳转到当前页,一个用户一个session,k-v形式的,字典式的。  

  服务器内存(sessionstateserver/sqlserver),体积不要太大,可以存敏感信息,重启丢失。一个用户一条,经常做传值(tempdata),负载均衡下session怎么处理?会话粘滞/session共享。如果浏览器禁用了cookie,还能用session吗?不能的,但是可以通过url地址传递sessionid。

浏览器关闭,登录就失效了,这是为什么呢?

  cookie存在浏览器内存,关闭浏览器后,cookie就没了,再次打开分配了新的sessionid,所以没有登录,之前登录的那个session还是在内存里面的。

  如果希望重新打开用户还在登录状态,就是在硬盘上存储cookie(expiretime),后台要检测cookie,认可cookie的有效性(第一次检测cookie,然后还是写入session,每次还是checksession)

协议:

  就是一个约定,保证多方的信息传输(中文也是一种约定)

  http协议:超文本传输协议,也就是个文本传输的规范,浏览器/客户端遵循;服务端也遵循,那么就可以发起交互了。

http协议理解,请求/响应

 

 

http的请求过程,就像发一个命令,实现约定好对个,浏览器按照格式组装命令

请求行:url长度有限制

header:有很多默认都是浏览器写的,也可以自己来,webapi的authorize,浏览器实际上是一个实现了http协议标准的应用程序

body:表单参数/上传的文件/图片(字符串),没有长度限制

 

c/s,客户端/服务端

  客户端链接到服务器socket,发起请求,服务器完成响应,释放链接

 b/s,浏览器/服务器

  简单快速,灵活,任何类型都可以返还,无状态(没有长时间的链接,没有连续的链接),无状态(两次请求都没有关联,所以无法识别)

  回发一个结果,实现约定好规格,服务器按照格式组装结果

  响应行:statuscode

  header:压缩格式,缓存,webapi权限,跨域,你控制的得浏览器支持

  body:返回的主体