Erlang cowboy 处理不规范的客户端

Cowboy 1.0 参考

本章:

Dealing with broken clients

存在许多HTTP协议的实现版本。许多广泛使用的客户端,如浏览器,十分符合规范。但是也有一些特殊的客户端非常糟糕,不遵守规范。

Cowboy尽可能地遵守规范,但是仍然无法处理全部可能的情形。Cowboy关注真是 web下的自然样例。如果客户端不遵守HTTP规范可能会无法理解Cowboy的响应。有一些变通的方法,本章就说明这个问题。

小写的消息头 Lowercase headers

Cowboy 将所有接收到的消息头转换成小写,同时返回的消息头也全部是小写。一些不按HTTP规范的客户端可能会报错。一个简单的解决办法是创建一个onresponse回调方法,用于对返回的头按客户端的要求格式化。

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.

注意SPDY客户端不会存在此类问题,因为规范声明所有的头都是小写,与HTTP不一样,HTTP允许大小写,确按照大小写不敏感的方式处理。

骆驼命名法消息头 Camel-case headers

常常由于易读的原因,保留这种方式的大小写。没有简单的方式处理这种情况,除非直接更改 cowboy_protocol 文件。

Chunked transfer-encoding

经常一个HTTP客户端声明HTTP/1.1,但是不支持块编码传输chunked transfer-encoding。按照HTTP/1.1客户端的规范要求,这是不正确的。

这有一个简单的变通解决办法。通过改变Req对象的response 状态为waiting_stream, Cowboy 就能按照HTTP/1.0客户端所理解的方式处理(标记为transfer-encoding而不是chunked transfer-encoding)。

Req2 = cowboy_req:set(resp_state, waiting_stream).

Erlang cowboy 处理不规范的客户端的更多相关文章

  1. Erlang cowboy 处理不规范的client

    Erlang cowboy 处理不规范的client Cowboy 1.0 參考 本章: Dealing with broken clients 存在很多HTTP协议的实现版本号. 很多广泛使用的cl ...

  2. Erlang cowboy http request生命周期

    Erlang cowboy http request生命周期 翻译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/http_req_life/ requ ...

  3. Erlang cowboy 入门参考之现代Web的发展历史

    Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术 ...

  4. Erlang cowboy websocket 服务器

    Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_ ...

  5. Erlang cowboy 入门参考

    Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/gettin ...

  6. Erlang cowboy 架构

    Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...

  7. Erlang cowboy 处理简单的HTTP请求

    Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...

  8. Erlang cowboy routing 路由

    Erlang cowboy routing 路由 本文译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/routing/ Routing 默认情况下,C ...

  9. [翻译][erlang]cowboy handler模块的使用

    关于Cowboy Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. Handlers,用于处理HTTP请求的程序处理模块. Plain HTTP Handlers ...

随机推荐

  1. Android倒计时器——CountDownTimer

    Android倒计时器--CountDownTimer 说明 第一个参数是倒计时的时间 第二个参数是多长时间执行一次回调 /** * @param millisInFuture The number ...

  2. Web服务,XFire的一个例子

    Web服务优点 互操作性:实现不同系统间的相互调用(语言无关.平台无关) Web服务是什么 Web 服务是一类应用程序,是能够用编程的方法通过Web调用来实现某个功能的应用程序 Web服务的体系结构 ...

  3. JAVA面向对象-----内部类的概述

    JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...

  4. VNC 登录上去灰屏,没有shell脚本,鼠标变成X

    CenterOS 1.安装vncserver yum install tigervnc-server -y 2.vncpasswd 设置pwd 3./etc/sysconfig/vncservers ...

  5. velocity中加载模板文件的方式

    velocity有多中种方式供我们去加载我们自定义的模板文件,下面详细的介绍使用的方法. 1.1.1. 加载classpath目录下的模板文件 使用classpath方式加载,是我们经常用到的一种方式 ...

  6. 高通msm8994性能及温度监测脚本

    [plain] view plain copystartTime=$(date +%Y-%m-%d-%H-%M-%S)  pathName="/data/cpu_logs"  fi ...

  7. 16 Content Provider总结

    第16天 Content Provider 一, 什么是Content Provider? 内容提供者 Android四大主件之一 :短信记录 通讯录 联系人 自定义 >Content Prov ...

  8. 1079. Total Sales of Supply Chain (25) -记录层的BFS改进

    题目如下: A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyon ...

  9. 05 Android强制设置横屏或竖屏/全屏

    全屏 在Activity的onCreate方法中的setContentView(myview)调用之前添加下面代码 requestWindowFeature(Window.FEATURE_NO_TIT ...

  10. SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传

    在gxpt_uas系统中,要实现文件(文件和图片等等,可以灵活配置)的批量上传至mongodb,在学习这个过程中,学习了mongodb,并实现了批量上传的功能,实现思路:在DWZ的基础上参考官方的实例 ...