Erlang cowboy 处理不规范的客户端

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).
时间: 2024-11-05 22:38:41

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

Erlang cowboy 处理不规范的client

Erlang cowboy 处理不规范的client Cowboy 1.0 參考 本章: Dealing with broken clients 存在很多HTTP协议的实现版本号. 很多广泛使用的client,如浏览器.十分符合规范.可是也有一些特殊的client很糟糕,不遵守规范. Cowboy尽可能地遵守规范,可是仍然无法处理所有可能的情形.Cowboy关注真是 web下的自然例子. 假设client不遵守HTTP规范可能会无法理解Cowboy的响应.有一些变通的方法,本章就说明这个问题.

Erlang cowboy 入门参考

Erlang cowboy 入门参考 cheungmine,2014-10-28 本文翻译自: http://ninenines.eu/docs/en/cowboy/HEAD/guide/getting_started/ 我没有按原文逐句翻译.仅仅是我自己的理解,力求简单明了.本文程序在RHEL6.4上写成并运行,参考下面的文章,安装Erlang: erlang在redhat上的安装 1 引言 Erlang不仅仅是一门语言,更是一个操作平台.Erlang开发者很少写单独的模块,而是写库和程序,然

Erlang cowboy websocket 服务器

Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_tutorial.html 本文不是原文的简单翻译,是参考原文,根据我的理解和实践写出来的.本文的源码见于: https://github.com/marcelog/erws 1 引言 Erlang可以用来实现一个websocket服务器.cowboy这样框架可以完成这个任务,是我们不必关注webs

Erlang cowboy http request生命周期

Erlang cowboy http request生命周期 翻译自: http://ninenines.eu/docs/en/cowboy/1.0/guide/http_req_life/ request的生命周期 本章解释服务器response之前的http request的步骤,以及cowboy实现的细节. Request/response 正如你了解到的,HTTP客户端连接到服务器,发送资源请求(request),服务器发送响应(response),其中包含可以获取到的资源. 在服务器发

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

Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术的发展历史,并可预见一下未来的发展.除了HTTP/2.0这个还未正式纳入规范的技术,Cowboy与所有这些技术都是兼容的. 早期的Web 起初的HTTP就是用来对GET请求返回HTML页面的.最初的版本是HTTP/0.9.HTTP/1.0定义了GET,HEAD和POST方法,能通过POST请求发送数

Erlang cowboy 架构

Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Architecture: http://ninenines.eu/docs/en/cowboy/1.0/guide/architecture/ Architecture Cowboy 是轻量的HTTP server. 它构建在Ranch之上,请参考Ranch. 每个连接一个进程 cowboy每个连接使用一个进

[erlang]cowboy handler模块的使用

关于Cowboy Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. Handlers,用于处理HTTP请求的程序处理模块. Plain HTTP Handlers(常规Handlers) Cowboy里面的handler最基础的事情就是实现 init/2 回调函数,处理请求,发送客户端响应(可选),最后返回. Cowboy根据 router configuration (路由配置)接收请求并初始化State. 下面是一个不做任何处理的handler: ini

Erlang 摘要

世界是并行的,Erlang程序反应了我们思考和交流的方式,人作为个体通过发送消息进行交流,如果有人死亡,其他人会注意到.Erlang里的模块类相当于OOPL中的类,进程相当于OOPL里的对象或类实例.并发编程可以用来提升性能,创建可扩展和容错的系统,以及编写清晰和可理解的程序来控制现实世界里的应用. 并发程序是以一种并发编程语言编写的程序,并发编程语言拥有用于编写并发程序的语言结构.Erlang的并发程序是由互相通信的多组顺序进程组成,一个进程就是一个轻量级的虚拟机,可以执行单个的Erlang函

cowboy rest

REST Flowcharts 这章节将通过一些列不同的流程图来介绍REST处理状态机. 一个请求主要有四条路线,一个是方法OPTIONS, 一个是方法GET和HEAD:一个是PUT,POST和PATCH,最后一个是DELETE. 所有的路径都是从"Start"开始,如果资源存在,除了OPTIONS路径,其他全部路径都经过"Content negotiation"并且可选"Conditional requests" 图. 红色代表引用另外的图,淡