web开发者很容易困惑的地方
来源:互联网 发布:英语翻译什么软件好 编辑:程序博客网 时间:2024/05/14 19:01
http协议实现的web接口,接收与发送数据,有没有可能发生丢包,表象是接受的数据不完整。
答案: 不可能
原因: tcp传输的可靠性,深入理解需知道tcp/ip协议的,建立连接三次握手,断开连接的四次握手
如果有人问,http不是应答式的么,这里我们需要知道,htttp是应用层,TCP/IP协议层,不可混淆,举个例子,网卡把你的数据截断
,你应用层是处理不了的。
http协议有一个Content-Length,就是我们发送/接收的body,如果这个Content-Length的长度与实际body长度不一致会怎么样了
我们可以用如下代码测试:
def fetch_local(): url = "http://127.0.0.1:8888/x" header = {"Content-Length": "4"} #header = {} data="x=y" req = urllib2.Request(url, data=data, headers=header) f = urllib2.urlopen(req) print f.read()[:30]
Content-Length如果设置短了了,如设置成2,那么服务端收到的:x=
如果设置长了呢?你会发现阻塞了,永远不会断开。这是因为服务端accept的fd,一直认为没读完,fd的状态一直不可写。
那么问题来了,如果是这样的话,我模拟http请求,故意把Content-Length 设置过长,岂不是可以把服务拖死(如报open too many files),
如果你能直接连别人的服务端口,的确可行,但是http一般暴露的是80端口,80端口一般假设在nginx,lvs等负载均衡机器,
nginx一般会设置超时,默认是60秒,如果60秒还没读完数据,就主动关闭了。
如果你要攻击某服务站点,可以通过不停的大量的发这种超时请求,同样可以大大拖跨站点性能,本人亲测有效果
cgi:
经常看到这个名字, 全称是Common gateway interface 通用网关接口,是一种规范。说明白了:
一个web服务就是监听一个端口,client连接这个端口,然后发送接收数据。大家为了各自写的web服务能够通用,于是就定义了这么一个东西,
符合cgi这个规范的,无论什么语言,都可以作为cgi脚步。
典型就是apache2
fastcgi: cgi 的升级版本
wsgi: python官方定义的一个cgi规范, 只要符合这个规范,不管你是tornado还是dignao, 都能统一部署
- web开发者很容易困惑的地方
- 揭开Web开发者最初的困惑
- 揭开Web开发者最初的困惑
- zz揭开Web开发者最初的困惑
- sql语句很容易犯错的地方
- 很容易让人困惑的对齐原则详解
- 10条困惑java程序员的地方
- Webpack——令人困惑的地方
- 开发者的社会价值与企业的弊病与困惑
- WEB开发者的好消息
- 发现一个c语言中用字符数组和char型指针管理字符串一个很容易搞混的地方
- 很容易忽视的问题
- 项目是很容易的
- 小米应用开发者文档(标注需要注意的地方)
- Web开发者的实用网址
- 响应式Web设计:Media Queries和Viewport的困惑
- spring的困惑--org.springframework.web.servlet.DispatcherServlet noHandlerFound
- WEB打印,不需要的地方隐藏掉
- Java常见Lock(二): lock之ReentrantLock
- java封装openTsDb连接以及查询,插入数据
- SDK封装 平台无关
- centos 7 安装zabbix
- sql杂记
- web开发者很容易困惑的地方
- C++纯虚函数
- 工具类SpringUtil
- 考试报名系统
- 安卓开发——如何完美隐藏底部虚拟导航栏
- Hadoop学习笔记—4.初识MapReduce 一、神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据
- 【10.26测试】
- pull2
- java-数组