Erlang cowboy 处理不规范的client
Erlang cowboy 处理不规范的client
Cowboy 1.0 參考
本章:
Dealing with broken clients
存在很多HTTP协议的实现版本号。
很多广泛使用的client,如浏览器。十分符合规范。可是也有一些特殊的client很糟糕,不遵守规范。
Cowboy尽可能地遵守规范,可是仍然无法处理所有可能的情形。Cowboy关注真是 web下的自然例子。
假设client不遵守HTTP规范可能会无法理解Cowboy的响应。有一些变通的方法,本章就说明这个问题。
小写的消息头 Lowercase headers
Cowboy 将所有接收到的消息头转换成小写,同一时候返回的消息头也所有是小写。
一些不按HTTP规范的client可能会报错。一个简单的解决的方法是创建一个onresponse回调方法,用于对返回的头按client的要求格式化。
capitalize_hook(Status, Headers, Body, Req) ->
Headers2 = [{cowboy_bstr:capitalize_token(N), V}
|| {N, V} <- Headers],
{ok, Req2} = cowboy_req:reply(Status, Headers2, Body, Req),
Req2.
注意SPDYclient不会存在此类问题,由于规范声明所有的头都是小写,与HTTP不一样,HTTP同意大写和小写。确依照大写和小写不敏感的方式处理。
骆驼命名法消息头 Camel-case headers
经常由于易读的原因,保留这样的方式的大写和小写。没有简单的方式处理这样的情况,除非直接更改 cowboy_protocol
文件。
Chunked transfer-encoding
经常一个HTTPclient声明HTTP/1.1,可是不支持块编码传输chunked transfer-encoding。
依照HTTP/1.1client的规范要求。这是不对的。
这有一个简单的变通解决的方法。通过改变Req对象的response 状态为waiting_stream
, Cowboy 就能依照HTTP/1.0client所理解的方式处理(标记为transfer-encoding而不是chunked transfer-encoding)。
Req2 = cowboy_req:set(resp_state, waiting_stream).
Erlang cowboy 处理不规范的client的更多相关文章
- Erlang cowboy 处理不规范的客户端
Erlang cowboy 处理不规范的客户端 Cowboy 1.0 参考 本章: Dealing with broken clients 存在许多HTTP协议的实现版本.许多广泛使用的客户端,如浏览 ...
- Erlang cowboy 架构
Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...
- Erlang cowboy 处理简单的HTTP请求
Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...
- Erlang cowboy routing 路由
Erlang cowboy routing 路由 本文译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/routing/ Routing 默认情况下,C ...
- Erlang cowboy http request生命周期
Erlang cowboy http request生命周期 翻译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/http_req_life/ requ ...
- Erlang cowboy 入门参考之现代Web的发展历史
Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术 ...
- Erlang cowboy websocket 服务器
Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_ ...
- Erlang cowboy 入门参考
Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...
- [翻译][erlang]cowboy handler模块的使用
关于Cowboy Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. Handlers,用于处理HTTP请求的程序处理模块. Plain HTTP Handlers ...
随机推荐
- 虚拟化:搭建本地虚拟化环境和安装ubuntu操作系统
本文介绍如何在本地(windows操作系统)安装虚拟机,并在虚拟机下安装ubuntu操作系统. 一.机器升级 因为是在我的笔记本电脑上操作.首先升级了我的笔记本,买了内存条,将我机器的内存增加到8G, ...
- JAVA之等号、传类对象参数与c++的区别
在JAVA中用等号对类对象进行赋值,实际上操作的是对象的地址. eg: package MyText; class ClassA { int value; public void seta(int v ...
- hdu 1102 Constructing Roads(最小生成树 Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ...
- eclipse的SVN插件的配置
http://www.cnblogs.com/kekec/archive/2010/08/09/1795581.html
- BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= ...
- Ormlite自定义db的位置和自动更新问题
先说说以下为测试代码,有点乱,大家讲究着看.以下例子都是采用的ormlite的框架. 第一步,自定义数据库的位置: 建议一个类DatabaseHelper 继承 OrmLiteSqliteOpenHe ...
- 基于visual Studio2013解决面试题之1401冒泡排序
题目
- Tomcat提供的安全机制
Tomcat中安全机制 BASIC认证 <login-config> <auth-method>BASIC</auth-method> </login-c ...
- php调用dll
http://download.csdn.net/detail/pinghe2005/5108556
- java实现小九机器人接口
package com.iask.webchat.chatmachine; import java.net.URLEncoder; import org.apache.http.HttpEntity; ...