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. Java安全管理器——SecurityManager

    总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性:二是Java语言开发的应用程序的安全性.由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我 ...

  2. EJB_开发单表映射的实体bean

    开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对 ...

  3. Android时遇到R.java was modified manually! Reverting to generated version!

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 进入 eclipse后clipse Menu >Projects > clean 这么做就把R文件删了,但是别担心, ...

  4. UNIX环境高级编程——初始化一个守护进程

    #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h&g ...

  5. MonoBehaviour介绍(Unity3D开发之一)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=486 猴子自学Unity已经一段 ...

  6. 【Unity Shaders】《Unity Shaders and Effects Cookbook》总结篇

    我的唠叨 不知不觉,从发表第一篇关于<Unity Shaders and Effects Cookbook>已经快十个月了.一开始的初衷就是学习笔记,毕竟将来回过头去看的时候,再看英文难免 ...

  7. printk的用法

    printk的用法 内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("<6> ...

  8. 套接字输入缓冲装置——InternalInputBuffer

    互联网的世界很复杂,信息从一端传向另一端过程也相当复杂,中间可能通过若干个硬件,为了提高发送和接收效率,在发送端及接收端都将引入缓冲区,所以两端的套接字都拥有各自的缓冲区,当然这种缓冲区的引入也带来了 ...

  9. [GitHub]第八讲:GitHub Pages

    Github Pages 是 github 公司提供的免费的静态网站托管服务,用起来方便而且功能强大,不仅没有空间限制,还可以绑定自己的域名.在 https://pages.github.com/ 首 ...

  10. iOS开发之八:UISlider、UISegmentedControl、UIPageControl的使用

    本文的三种控件,用的也非常多,而我也是经常图懒,而去打开原来的项目去拷贝,现在记录一下,就不用去项目中去找这些控件的用法了. 一.UIActivityIndicatorView 的使用 UIActiv ...