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. java-使用反射实现ORM映射

    自定义两个注解 package com.moon.ROM; import java.lang.annotation.ElementType; import java.lang.annotation.R ...

  2. 动态规划基础复习 By cellur925

    结束帝都的qbxt dp图论精讲班后,感觉自己依然很水,接下来的一周,不妨来复习一下讲课内容:) 动态规划是lyd讲的,上次在泉城讲数据结构,然鹅体验较差,这次虽说好了些,但还是比想象中的效果不好(还 ...

  3. 设置mysql 定时备份任务

    1 修改配置文件  /etc/my.conf (为了命令 mysqldump能省略输入密码执行,mysql5.5 之后已经不建议控制台直接输入密码的方式) 增加如下配置 [client]host=lo ...

  4. SwipeLayou与ScrollerView滑动冲突

    在SwipeLayout内嵌套ScorllerView滑动会出现上滑滑动冲突,ScollerView不能往上滑,,,,,, mSlv.getViewTreeObserver().addOnScroll ...

  5. Ubuntu 必装软件及安装教程

    安装搜狗拼音输入法 因为sogou是基于fcitx的,所以先添加fcitx键盘输入法系统[系统默认是iBus].在终端中,输入命令将下载源添加至系统源(添加依赖). sudo add-apt-repo ...

  6. 2015湘潭市第七届大学生程序设计竞赛 —— Fraction

    题目大意: 小数化分数,但是分母限制在[1,1000],很明显的枚举,但是在赛场上的时候傻逼了,无论怎么枚举,怎么二分就是wa,wa到死···········. (ps:我要给出题人寄刀片~~~~), ...

  7. vijos1846 [NOIP2013] 华容道【最短路】

    传送门:https://vijos.org/p/1983 (其实noip的题各个oj都会有的,就不贴其它传送门了) 这道题真的是,怎么说,我都不知道怎么评价了= =.果然数据量小的题怎么暴力都可以过. ...

  8. 配置Ubuntu16.04第02步:更改镜像源,更新系统

    Ubuntu 16.04下载软件速度有点慢,因为默认的是从国外下载软件,那就更换到国内比较好的快速更新源(就是这些软件所在的服务器),一般直接百度Ubuntu更新源就能出来一大堆,这时候最好是找和自己 ...

  9. 升序 Collections.sort(list) 降序 Collections.reserve(list) 随机 Collections.shuffle(list)

    package Day28ketangzuoye; import java.util.ArrayList; import java.util.Collections; import java.util ...

  10. Android习惯——给全部Activity添加集合管理

    title: 2017-3-23 Android习惯--给全部Activity添加集合管理 public void ActivityCollector{ public static List<A ...