您的位置:首页 > 编程语言 > Python开发

Python知识点整理(5) —— 计算机网络

2019-04-02 16:59 183 查看

网络

TCP/UDP

计算机网络结构

  • 物理层
  • 链路层
  • 网络层(提供主机到主机到通路,IP协议:ip包通过相同路径到达目的地,到达顺序与发送顺序不一致如何解决)
  • 传输层(提供端到端、应用到应用到通路,TCP/UDP)
  • 应用层( 高层协议,HTTP/SMTP, DSN/RTP)

浏览器输入url中经历的过程

  • DNS缓存,不在DNS缓存也不在host文件里面,域名服务器发起一个DNS查询(递归????),返回IP地址
  • 调用socket函数,发起TCP请求,TCP三次握手
  • 应用层协议,HTTP请求
  • 反向代理Nginx,负载均衡,增大吞吐量
  • uwsgi/gunicorn(WSGI),兼容web应用(django、flask、etc.)
  • web框架,web app响应
  • TCP 四次挥手

TCP三次握手/四次挥手

TCP V.S. UDP

  • TCP:面向连接(3次握手)、可靠(通过对方的确认确定被对方收到)、基于字节流(tcp有缓存区、分段发送)
  • UDP:无连接、不可靠、面向报文

HTTP协议

http请求的组成

http响应的组成

  • 状态行
  • 响应头(重点)
  • 响应正文

http常见状态码

  • 1** 信息:服务器收到请求,需要请求者继续执行操作
  • 2** 成功:操作被成功接受并处理(200成功)
  • 3** 重定向:需要进一步操作完成请求(301永久重定向,302临时重定向)
  • 4** 客户端错误(403禁止,404不见了)
  • 5** 服务器错误

Restful 语义

  • get:获取
  • post:创建
  • put:更新
  • delete:删除

**GET/POST 区别 **

  • restful语义不同
  • GET:幂等(服务器上没有副作用),post:非幂等(会影响数据库等数据)
  • get请求参数放到url(明文),有长度限制;post是放到请求体里,更安全

幂等性

  • 无论调用多少次都得到相同结果都http方法
  • a=4:幂等,a+=4:非幂等
  • 幂等的方法客户端可以安全地重发请求
  • 非幂等要在server端实现
method idempotent safe
options
get
head
put
post
delete
patch

ps:安全是指会不会修改数据

http长连接

  • 短连接:建立连接 --> 数据传输 --> 关闭连接(建立、关闭的开销大)
  • 长连接:保持tcp连接不断开(connection:keep-alive)
  • 区分http请求:content-length(静态:长度)/tansfer-encoding:chunked(动态:每次需要发送多长,指导chunked=0就结束)

标准的http是无状态&无连接

  • 标准的 http 协议:不包括cookies, session,application的http协议
  • 无连接 每一个访问都是无连接,服务器挨个处理访问队列里的访问,处理完一个就关闭连接,这事儿就完了,然后处理下一个新的
  • 无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接
  • 无状态
      无登录状态,即服务器不知道某个用户是否已登录过了。因为愚蠢的服务器不知道客户端是否已登录过了,所以每次都要在交互场景(会话)中请求中带上上一次的请求信息
  • TCP一直有状态,HTTP一直无状态,但是应用为了有状态,就给HTTP加了cookie和session机制,让使用http的应用也能有状态,但http还是无状态
  • cookie

    • Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容
    • Cookie具有不可跨域名性
    • 保存登录信息有多种方案 方案一:用户名与密码都保持到Cookie中,下次访问时检查Cookie中的用户名与密码,与数据库比较。这是一种比较危险的选择,一般不把密码等重要信息保存到Cookie中
    • 方案二:是把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。这种方案略微安全一些。如果不希望保存密码,还可以把登录的时间戳保存到Cookie与数据库中,到时只验证用户名与登录时间戳就可以了(每次)
    • 方案三:只在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库。实现方式是把账号按照一定的规则加密后,连同账号一块保存到Cookie中。下次访问时只需要判断账号的加密规则是否正确即可(安全:把账号保存到名为account的Cookie中,把账号连同密钥用MD5算法加密后保存到名为ssid的Cookie中。验证时验证Cookie中的账号与密钥加密后是否与Cookie中的ssid相等)

    cookie & session

    • session:服务器生成之后给客户端(通过url参数/cookie)
    • cookie:实现session(服务器识别用户)的一种机制,通过http cookie字段实现
    • session通过在服务器保存session_id识别用户,cookie存储在客户端
    • cookie一般是加密的

    参考

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: