Erlang cowboy 处理不规范的客户端

时间:2022-06-01 19:07:34

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. &lbrack;翻译&rsqb;&lbrack;erlang&rsqb;cowboy handler模块的使用

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

随机推荐

  1. Android Json处理框架

    1.Android 中的Json解析工具fastjson .序列化.反序列化 2.Android Gson的使用总结 3.Android-JSONTool 一个简易的Json框架类,小到只有一个类 有 ...

  2. 第22&sol;24周 等待和I&sol;O延迟统计

    大家好,欢迎回到性能调优培训的第22周.上周我谈了SQL Server里的基线,今天我们继续,谈下SQL Server里的等待和I/O延迟统计.当我进行SQL服务器健康检查时,我总会使用这2个维度全局 ...

  3. jQuery实现表格行的动态增加与删除 序号 从 1开始排列

    <table id="tab" border="1" width="60%" align="center" sty ...

  4. windows 2008 server ftp 无法访问解决办法

    安装一个WINDOWS自带的FTP服务器,整了接近一天的时间,按网上的教程,无论如何搭建.最终都是内部IP可以访问.外部IP无法访问. 1.防火墙全部关掉. 2.FTP所在目录给的是EVERYONE的 ...

  5. zend

    1.导入一个已经存在的目录到空间 在空间左侧新建--->项目--->已经存在的目录

  6. Oracle存储过程基本语法

    一.形式 1 CREATE OR REPLACE PROCEDURE 存储过程名  //是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 2 IS   ...

  7. 经典弹出层Colorbox - a jQuery lightbox

    Colorbox - a jQuery lightbox A lightweight customizable lightbox plugin for jQuery Fork me on GitHub ...

  8. EECS 649 Introduction to Artificial Intelligence

    EECS 649 Introduction to Artificial IntelligenceExamElectronic Blackboard Submission Due: April 24, ...

  9. linux服务器后台运行服务

    linux 后台运行一个服务 难免会遇到在Linux,后台执行任务.下面,总结了一下关闭窗口任然在后台执行的方法,例如 #执行一个打包命令 tar czf /data/backup.tgz /data ...

  10. spring mvc 数据格式化

    web.xml <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www. ...