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程序BUG中的常见单词)

    The local variable xxx may not have been initialized. 局部变量xxx可能尚未初始化 local variable 局部变量 initialized ...

  2. 字体使用sp、dp的区别

    Android设置字体大小, 该用sp还是dp? 大部分人肯定脱口而出, 用sp啊, 傻瓜都知道要用sp而不是dp!!! 那么为什么呢? 可能有人会说, 是google官方专门定义了sp这个单位来描述 ...

  3. LoadRunner12学习之路(1-5)

    本次LoadRunner12学习用户指南,学习周期预计3天,每天学习1-2单元内容! 2017.12.17 一.使用HPE Web Tours示例应用程序 本教程使用 HPE Web Tours(一个 ...

  4. ACM_跳坑小能手(暴力)

    跳坑小能手 Time Limit: 2000/1000ms (Java/Others) Problem Description: GDUFE-GAME现场有一个游戏场地人头窜动,围观参与游戏的学生在场 ...

  5. MyEclipse去除不必要的validation

    MyEclipse在构建项目时去除不必要的Valication可以加快构建速度. 操作: Window->Perferences->MyEclipse->Validation 在Va ...

  6. electron打包整理

    最近在折腾把项目打包成桌面应用程序,发现一个工具electron,可以讲项目打包成一个跨平台的应用程序,很方便,来学习一下. 1.先安装electron.electron-packager,安装方法可 ...

  7. WPF学习07:MVVM 预备知识之数据绑定

    MVVM是一种模式,而WPF的数据绑定机制是一种WPF内建的功能集,两者是不相关的. 但是,借助WPF各种内建功能集,如数据绑定.命令.数据模板,我们可以高效的在WPF上实现MVVM.因此,我们需要对 ...

  8. Java核心技术梳理-异常处理

    一.引言 异常总是不可避免的,就算我们自身的代码足够优秀,但却不能保证用户都按照我们想法进行输入,就算用户按照我们的想法进行输入,我们也不能保证操作系统稳定,另外还有网络环境等,不可控因素太多,异常也 ...

  9. 深入学习数据结构之bitmap(四)

    Bitmap,今天我们来分析一下bitmap的实现原理以及它的使用场景. 一.使用场景: 1.对于大量数据(几千个数据的就不要在废话了),且无重复或者可以忽略重复的数字.为啥这里要强调无重复,因为在b ...

  10. Myeclipse 6.0代码

    import java.util.*; import java.io.*; public class bbs { private static final String LL = "Deco ...