https://imququ.com/post/transfer-encoding-header-in-http.html

#! /usr/bin/python
#coding:utf8 import socket
import signal
import errno from time import sleep def sig_handler(signo, frame):
print "get signo ", signo
global runFlg
runFlg = False
global listeningFd
listeningFd.shutdown(socket.SHUT_RD) def http_response_with_content_length(sock):
""" 有长度没有 close """
sock.send('HTTP/1.1 200 OK\r\n')
sock.send('Content-Length: 12\r\n')
sock.send('\r\n')
sock.send('Hello World!') def http_response_with_close(sock):
"""" 没有长度有 close """
sock.send('HTTP/1.1 200 OK\r\n')
sock.send('\r\n')
sock.send('Hello World!')
sock.close() def http_response_chunked(sock):
"""" 没有长度,没有 close """
sock.send('HTTP/1.1 200 OK\r\n')
sock.send('Transfer-Encoding: chunked\r\n')
sock.send('\r\n') # 第一个 chunk
sock.send('a\r\n')
sock.send('1234567890\r\n') # 第二个 chunk
sock.send('5\r\n')
sock.send('12345\r\n') # 第三个 chunk,也是最后一个
sock.send('0\r\n')
sock.send('\r\n') def http_response(sock):
"""" 没有长度,没有 close """
sock.send('HTTP/1.1 200 OK\r\n')
sock.send('\r\n')
sock.send('Hello World!') signal.signal(signal.SIGINT, sig_handler) HOST = "127.0.0.1"
PORT = 37001 listeningFd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listeningFd.bind((HOST, PORT))
listeningFd.listen(2) print "HttpServer Started" runFlg = True
while runFlg:
try:
connectedFd, addr = listeningFd.accept()
except socket.error as e:
if e.errno == errno.EINT:
print "get a except EINTR"
else:
raise
continue if runFlg == False:
break print "connected by ", addr data = connectedFd.recv(1024)
if not data:
break
print data
#http_response_with_close(connectedFd) # 流量器能正确处理
#http_response(connectedFd) # 浏览器不能正确处理 pending
#http_response_with_content_length(connectedFd) # 浏览器能正确处理
http_response_chunked(connectedFd) # 浏览器能正确处理
else:
print "runFlg ", runFlg print "Done"

http chunked 理解的更多相关文章

  1. 全面理解HTTP

    URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统一资源定位符U ...

  2. 【云计算】docker的小知识,帮你更深入理解容器技术

    关于docker的15个小tip   1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...

  3. 取消掉Transfer-Encoding:chunked

    先说解决方法:::不让服务器返回Transfer-Encoding:chunked,在客户端请求的时候可以使用http 1.0的协议. 有时候,Web服务器生成HTTP Response是无法在Hea ...

  4. HTTP协议理解与应用总结

    总结了自己在实际工作场景中遇到的与http协议相关的一些内容的理解. Request & Response Request格式 <request-line> 比如:GET /api ...

  5. jsonp与cors跨域的一些理解(转)

    CORS其实出现时间不短了,它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源.而这种访问是被同源策略所禁止的. ...

  6. 爬虫入门系列(一):快速理解HTTP协议

    4月份给自己挖一个爬虫系列的坑,主要涉及HTTP 协议.正则表达式.爬虫框架 Scrapy.消息队列.数据库等内容. 爬虫的基本原理是模拟浏览器进行 HTTP 请求,理解 HTTP 协议是写爬虫的必备 ...

  7. 转 node.js里面的http模块深入理解

    问题1:HTTP服务继承了TCP服务模型,是从connection为单位的服务到以request为单位的服务的封装,那么request事件何时触发? 注意:在开启keepalive后,一个TCP会话可 ...

  8. 前端教程(1)http协议的深刻理解

    一 HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网      互联网=物理连接介质+互联网协议     2.互联网建立的目的? 数据传输打破地域限制,否则的话,我 ...

  9. 深入理解OkHttp源码(三)——网络操作

    这篇博客侧重于了解OkHttp的网络部分,包括Socket的创建.连接,连接池等要点.OkHttp对Socket的流操作使用了Okio进行了封装,本篇博客不做介绍,想了解的朋友可以参考拆轮子系列:拆O ...

随机推荐

  1. Element-wise operations

    Element-wise operations An element-wise operation operates on corresponding elements between tensors ...

  2. Spring Boot:关于“No converter found for return value of type: class xxx”的解决方法

    首先在对应的controller中的@RestController中返回json对象的操作 public class HelloController { @RequestMapping("/ ...

  3. 原生javascript实现计时器

    成品图如意下所示: 实现加到等于5的时候停止 搭建HTML结构 minutes:<input type="text" value="0"> seco ...

  4. BP神经网络算法改进

    周志华机器学习BP改进 试设计一个算法,能通过动态调整学习率显著提升收敛速度,编程实现该算法,并选择两个UCI数据集与标准的BP算法进行实验比较. 1.方法设计 传统的BP算法改进主要有两类: - 启 ...

  5. 452 Minimum Number of Arrows to Burst Balloons 用最少数量的箭引爆气球

    在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了.开始坐标总是小于结束坐标.平面 ...

  6. 230 Kth Smallest Element in a BST 二叉搜索树中第K小的元素

    给定一个二叉搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素. 注意:你可以假设k总是有效的,1≤ k ≤二叉搜索树元素个数. 进阶:如果经常修改二叉搜索树(插入/删除操作)并且你 ...

  7. (二)Spring容器

    大佬总结的很好,请去看大佬博客. http://www.cnblogs.com/chenssy/archive/2012/11/15/2772287.html https://www.cnblogs. ...

  8. poj3685 Matrix

    思路: 二分套二分. 矩阵在每一列上是严格递增的,可以利用这一点进行二分. 实现: #include <cstdio> #include <cmath> #include &l ...

  9. vue--组件中的自定义事件

    父组件通过props向子组件传递数据,子组件通过自定义事件向父组件传递信息. 在子组件中通过$emit触发事件,父组件在直接使用子组件的地方使用v-on(即@)来监听子组件触发的事件. 举例:(不知道 ...

  10. ES6学习笔记(1)----let和const命令

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同  不同点  a.在代 ...