• 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).

  • 相关阅读:
    团队项目冲刺第五天
    团队项目冲刺第四天
    团队项目冲刺第三天
    团队项目冲刺第二天
    团队项目冲刺第一天
    团队任务命题
    java报错the superclass was not found 解决方案
    Buildings 分类: ACM 多校 2015-07-23 22:09
    1009 数字1的数量 分类: 51nod 2015-07-20 21:44 3人阅读 评
    1284 2 3 5 7的倍数 分类: 51nod 2015-07-18 22:06 6人阅读
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5173039.html
Copyright © 2020-2023  润新知