HTTP:Content-Type

这篇文章的内容来自以下的博客文章的整理:
https://imququ.com/post/four-ways-to-post-data-in-http.html
http://homeway.me/2015/07/19/understand-http-about-content-type/

关于

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。

我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:

<method> <request-URL> <version>
<headers>

<entity-body>

议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。

但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。

Content-Type

Content-Type用于指定内容类型,一般是指网页中存在的Content-Type,Content-Type属性指定请求和响应的HTTP内容类型。如果未指定 ContentType,默认为text/html。

下面是几个常见的Content-Type:

  1. text/html
  2. text/plain
  3. text/css
  4. text/javascript
  5. application/x-www-form-urlencoded
  6. multipart/form-data
  7. application/json
  8. application/xml

前面几个都很好理解,都是html,css,javascript的文件类型,后面四个是POST提交数据的方式。后面将主要讨论POST提交数据的几种方式。

application/x-www-form-urlencoded

application/x-www-form-urlencoded 是常用的表单提交数据方式,普通的表单提交,或者js提交数据,默认都是通过这种方式。

比如一个简单地表单:

<form enctype="application/x-www-form-urlencoded" action="http://homeway.me/post.php" method="POST">
    <input type="text" name="name" value="homeway">
    <input type="text" name="key" value="nokey">
    <input type="submit" value="submit">
</form>

务器收到的raw header会类似:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,gl;q=0.2,de;q=0.2
Cache-Control:no-cache
Connection:keep-alive
Content-Length:17
Content-Type:application/x-www-form-urlencoded read more

阅读全文

妈妈把儿童安全座椅安在副驾驶 宝宝车祸受伤

如今,越来越多的父母都知道,开车时应该给宝宝设置儿童安全座椅。

但是,安全座椅装在车内哪个位置才正确?这个问题大家有考虑过吗?

儿童安全座椅安装的不对,也是会出大事的。前几天就有一位妈妈,因为把安全座椅装在副驾驶上,出车祸时,2岁宝宝受伤了。

在此,专家提醒大家,儿童安全座椅绝对不能安装在副驾驶位置,最安全的地方,应该是后排两侧位置。

■ 案例:妈妈把安全座椅安在副驾驶位置 宝宝车祸中受伤

2015年4月13日中午,辽宁省灯塔市交警大队接到报警——两辆轿车撞上了。交警赶到现场发现,一白一黑两台轿车前脸贴在一起,刮碰轻微。

一名不到30岁的女子抱着个男孩,孩子哇哇哭,脑门已经出血。女子是白色轿车的车主。

交警发现,白色轿车副驾驶位置安放着一个儿童安全座椅,女子称,事发时2岁的儿子就坐在这个位置。

“你怎么能把儿童座椅放在这个位置呢?”交警问。

女子称,她是全职妈妈,开车出门时都要带着孩子,起初她把儿童座椅放在后排座,由于担心孩子淘气,她开车时总要回头看看孩子,于是她把座椅放在了副驾驶,这样看护起来很方便。

交警大队侯警官听罢忍不住感叹:“这妈妈心真大,要不是轻微刮碰,孩子不知道会咋样!”

妈妈把儿童安全座椅安在副驾驶 宝宝车祸受伤

■ 解答:儿童安全座椅到底应该安装在哪里?

国家质检总局的统计数据显示,当车体遭受突然撞击时,正确使用儿童安全座椅可使得婴儿车祸伤亡率降低70%以上;1到4岁儿童的死亡率能降低54%以上;4到7岁的儿童的死亡率也降低59%以上。

下面就一起来看看,如何正确使用安全座椅。

1、9个月以下孩子需“背向”安装儿童座椅

首先,要根据孩子的年龄,来确定前向安装还是后向安装。

由于孩子的头大、颈细、身子小,撞击时颈部易受伤害,因此9个月以下的孩子,必须使用有后向安装功能的座椅,孩子乘坐时背向汽车前行方向。

2、绝对不能安装在副驾驶位置!气囊容易伤孩子

儿童乘车最安全有效的保护方式就是使用儿童安全座椅。正确使用儿童安全座椅,可使儿童在车祸中伤亡率大幅降低,但这种“救命椅”究竟该安装在什么位置,很多人并不清楚。

现实中,像上文这位粗心母亲把儿童座椅放在副驾驶的大有人在,他们的想法很相似:照顾孩子方便。

事实上,儿童汽车座椅绝对不能安装于前排副驾驶位置,否则一旦发生事故,安全气囊触发时的冲力很有可能造成儿童胸部骨折、窒息、颈椎骨折等严重伤害。

也许有人会反驳,副驾驶安全气囊不是有锁止功能吗?锁止了不就可以了。话是没错,但啥事情都有可能发生,万一副驾驶气囊锁止时候,因为某些原因不起作用呢?小心驶得万年船,还是那句话,为您了孩子的安全着想,请将安全座椅安装在后排主、副驾驶位后面并一定要将车门儿童安全锁关闭。

妈妈把儿童安全座椅安在副驾驶 宝宝车祸受伤

3、后排中间也不安全!不能有效固定座椅

汽车后座是乘车的安全区域,因为后座通常是与一般碰撞相距最远的位置。因此,现实中,还有一部分父母,为了让孩子在车内的视野更开阔,把儿童座椅放在后排正中间位置,这也是极不安全的。

事实上,这也是不正确的,因为大部分儿童安全座椅都是用车载三点式安全带安装或是isofix接口安装,而大部分车型的中间位置并没有isofix接口,安全带也只有一根腹带,并不能有效固定安全座椅。

4、哪个座位最安全?后排两侧座位

说到这里,相信大家也都已经想到了,儿童汽车安全座椅应安装在后排两侧座位上,这是最安全的地方。非常不建议安装在副驾驶位置、后排中间的位置。

此外,孩子上下车的时候应该从右侧车门,或是紧靠人行道一侧的车门上下车。无论什么时候,只要有孩子坐在车里,都应该闭合儿童锁。

阅读全文

选宝宝玩具避开这些“隐形杀手”

近日,国家质检总局责令31家企业召回其存有缺陷的31批次玩具产品,儿童玩具的安全问题再次成为公众关注的焦点。记者采访发现,儿童玩具虽然价格昂贵,但却并没有吓住家长们的腰包,一些配有高科技、遥控、发生、自动、仿真的玩具尤为抢手。

宝宝逐渐长大,独自玩耍的时间增多,殊不知不少玩具竟是埋伏在孩子身边的“隐形杀手”!记者在广州各大医院急诊科了解到,由玩玩具不慎引起的误 食、窒息、摔伤、割伤的病例并非少数。玩具是宝宝成长的伴侣,但大部分家长却不了解如何挑选安全的儿童玩具。医生提醒,家中有0-3岁的小宝宝,家长们选 玩具时要特别小心,避开这些危险因子。

选宝宝玩具避开这些“隐形杀手”

“小”玩具(危险因子:误食、窒息)

“暑假以来,急诊已收治了好几例儿童将玩具子弹塞入耳朵,鼻孔后取不出来的病例。”南方医科大学南方医院急诊科副主任医师许立军介绍,暑假不少 孩子喜欢玩模拟枪战,玩具子弹体积小,很容易被孩子误食、塞入耳朵、鼻孔。此外,射程更远,伤害更强的BB弹也有可能对孩子造成伤害,“每年的暑假和寒 假,都是孩子眼睛意外伤的高发期,其中由BB弹枪造成的伤害占了相当大的比例。”

许立军提醒,一些体积较小,颜色鲜艳的“小”玩具,如积木、弹弹球等也是很危险。在选购时注意其体积必须大于孩子口腔直径才可以购买。“体积较小的玩具极易被孩子吃到嘴里而成为气管异物;如果孩子吞进去2个或者更多的磁铁,体内的吸力会导致肠道的致命损伤。”

发声玩具(危险因子:伤害听力)

现在出售的许多玩具融进了声、光、电现代科学技术,家长都很乐意为孩子购买。殊不知,噪音越大的玩具,对婴幼儿的听力危害也越大。许立军表示,孩子对声音的感应要比成年人灵敏,如果儿童玩具发出很大声响,就可能会给婴儿的听力造成伤害。

日常普通谈话声为30-40分贝,高声说话为80分贝以上,超过70分贝的噪音会对小儿的听觉系统造成损害;当达到80分贝时,儿童就会感到吵 闹难受;如果噪音经常达到80分贝,儿童会产生头痛、头昏、耳鸣、情绪紧张、记忆力减退等症状。婴幼儿的健康成长,需要安静舒适的环境,如果长期受到噪音 刺激,会变得容易出现激动、缺乏耐受性、睡眠不足、注意力不集中等表现。

有些幼儿玩的冲锋枪、大炮、坦克车等玩具,在10厘米之内,噪音会达到80分贝以上。许立军提醒,在给孩子选择玩具时,一定要注意玩具发出的声 音要控制在70分贝以下。此外,大部分音乐玩具都是用电池作为能源,这些电池很容易被宝宝抠掉,有可能被孩子吞食的危险,如果孩子吞食的电池还有电量,它 还会因含有电流而导致体内烧伤。所以购买带电池的玩具时要看电池盒是否有可靠的螺丝固定。

选宝宝玩具避开这些“隐形杀手”

绒绳玩具(危险因子:呼吸道感染、窒息)

孩子们经常会抱着毛绒玩具睡觉,还会拿毛绒玩具咬着玩,很有可能产生诸如呼吸道感染等疾病,严重的还会引起支气管痉挛、咳嗽甚至哮喘等,部分小 孩会出现湿疹等皮肤过敏现象。许立军表示,一些毛绒玩具的眼睛、鼻子、扣子等,都是被粘贴到玩具上的,经常会出现划伤小孩皮肤,或者不慎被孩子吞咬到肚子 里的危险情况。

此外,一些带绳、线的玩具也是防不胜防的“危险物”。孩子非常喜欢牵着绳子拉动或甩着绳子玩耍,绳子很容易缠在孩子的手指或脖子上,时间长了轻 则造成指端缺血坏死,重则能让宝宝窒息。所以,家长在选择带绳玩具时,绳子长度不能超过宝宝的颈部周长,年龄小的孩子最好不要玩这类带绳玩具。

“密闭”玩具(危险因子:中毒、窒息、误食)

许立军介绍,密闭玩具主要包括头套、面罩等,还有充气玩具。头套、面罩玩具本身密不透风,在口和鼻子处没有留下呼吸的地方,如果孩子长时间佩戴 会造成大脑缺氧,使孩子出现头晕、眼花现象,严重时还会造成窒息。建议家长判断一个头套、面罩玩具的危险状况,要看这个玩具口腔和鼻腔的进气孔大小是否安 全,然后再看这个面具玩具的原材料是否合格,是否含有有毒物质。

“充气玩具,如气球,就存在多种隐患,首先是气球爆炸容易给孩子造成伤害,特别是氢气球,如果遇到火焰,还能引起剧烈的燃烧;其次是气球碎片一 旦进入孩子的呼吸道,是很难取出的,直接威胁生命安全。”许立军提醒,气球比较不适合当孩子玩具,孩子玩气球时,家长要多加注意,如果气球被孩子抓破,要 及时清理每一块碎片,以免被孩子吞食。

选宝宝玩具避开这些“隐形杀手”

“不光滑”的玩具(危险因子:割伤挫伤、中毒)

材质比较坚硬,而表面又凸凹不平,或者本身棱角比较尖锐的玩具,如以金属作为主要材质或者全部由金属制成的玩具,边角坚硬,毛刺较多,表面颗粒 较大、比较尖锐,有可能会挫伤或者割伤孩子。许立军提醒,家长别给孩子买不光滑的玩具,特别是不要给5岁以下的宝宝购买金属玩具。

除此之外,一些金属玩具外面涂有釉漆作为装饰,这些釉漆可能含有一些对人身体有危害的重金属,比如铅等。

阅读全文

如何从小培养孩子的审美观?

懂艺术的前提是具备一定的审美能力,审美能力与一个人的气质和艺术鉴赏能力息息相关。从小帮宝贝建立高雅的审美观念,其实上是在培养有艺术气质的孩子。如何培养孩子的审美观呢?

为什么要塑造审美观

爱美之心,人皆有之。但要使一个人真正地懂得美和丑并能进行美的创造,却又离不开系统的审美教育。对小宝宝进行审美教育尤其重要。这是因为,他们正处于长身体、求知识的基础阶段。美育的好坏优劣也将会同智育和德育、体育一样,影响着宝宝的未来发展。作为个体的人,有内在的方面和外在的方面。智力才能、伦理道德、感情心理是内在的方面,而身体形态结构则属于外在的方面。外在方面与体育相应;而内在的三个方面又分别表现为:知、意、情。

在宝宝的日常生活中帮助他们辨别美丑

美的事物是具体的、形像的、生动的,可以被人感知的。自然美使人赏心悦目,心情舒畅愉快;社会美使人敬佩、赞叹、感奋,以至于热泪盈眶激动不已;艺术美则扣人心弦,如身临其境,使人喜怒哀乐溢于言表。宝宝的日常活动总要同自然社会和各种艺术形式打交道。

金色的太阳、银色的月光、闪闪的星星、繁茂的森林、碧绿的青山、奔腾的河流;儿童、少年、小伙伴的感人事迹,解放军叔叔保家卫国的战斗场面;影视戏剧中威武雄壮的画面,先辈们可歌可泣的壮举。所有这些事物,都会感染教育着宝宝们,激励、撞击着他们的幼小心灵。

同时,被砍伐一空的旷野、秃山,干涸的河床、龟裂的大地;衣冠不整的流氓、阿飞,神情沮丧、缺臂短腿的俘虏伤兵以及道貌岸然却满腹男盗女娼的伪君子;还有影视戏剧中的侵略者、胖翻译官、特务、叛徒等一系列残渣余孽,总给人以丑陋不堪的感觉。

如何从小培养孩子的审美观?

要注意培养宝宝形成美的观念

对宝宝进行审美教育,还要注意培养他们形成美的观念,使他们能够以内心积淀的美的知识、美的标准,美的观念去评价、衡量、判断客观事物的美和丑。所以审美教育不能满足于宝宝能够在成人的指点下简单地分清美丑,还要使之升华为美的观念。推而广之,扩大审美的范围和视野,做到举一反三、触类旁通。

审美教育要注意联系宝宝的生活、思想的实际

强调劳动创造美的观点。由于美感是极为复杂的、多种心理因素综合协调的心理过程,因此这就决定了审美教育的多层次、多角度,同时也使审美教育的难度增大。为此,对宝宝的审美教育不要好高骛远,搞得玄而又玄,而要紧密联系宝宝的生活实际和思想实际,因势利导,解决一些实际问题。

诸如,从宝宝的穿着、打扮,包括饮食起居、个人卫生、环境整洁入手都可涉及美与丑的问题。这些方面也是宝宝与父母家人之间最易发生矛盾冲突的地方。

有的父母说,最头疼的就是宝宝的衣着选择总是和父母不一致。把宝宝打扮得整洁、漂亮是父母的共同愿望。漂亮就是一种美。它表现为穿着的合体,衣服面料的考究,款式的新颖、大方、入时,颜色的协调等等。在这些方面宝宝的知识和经验都是十分欠缺的。需要父母以自己的审美修养来加以教育、诱导和启发。可以结合每件衣物的挑选,每件用品的选择,宝宝房间、床榻的布置以及宝宝的个人卫生等生活方面来充实、丰富宝宝关于美的观念。

小编总结:在日常生活中,父母要抓住细节,让宝宝学会分辨美的事物。贴近大自然能有效地培养宝宝的美感。审美能力强的宝宝生活也会特别有条理哦。

阅读全文

RESTful API最佳实践

这篇文章整理内容来自以下的博客文章

http://www.ruanyifeng.com/blog/2014/05/restful_api.html

http://www.scienjus.com/my-restful-api-best-practices/

不要纠结于无意义的规范

RESTful 真的很好,但它只是一种软件架构风格,过度纠结如何遵守规范只是徒增烦恼,也违背了使用它的初衷。

就像 Elasticsearch 的 API 会在 GET 请求中直接传 JSON,但这是它的业务需要,因为普通的 Query Param 根本无法构造如此复杂的查询 DSL。Github 的 V3 API 中也有很多不符合标准的地方,这也并不会妨碍它成为业界 RESTful API 的参考标准。

接下来要介绍的一些东西也会跟标准不符,但这是在实际开发中遇到过、困扰过、思考过所得出的结论。

为什么要用 RESTful

网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……)。

因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现”API First”的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。理解RESTful API请看《理解RESTful架构》

协议

API与用户的通信协议,总是使用HTTPS协议。如果全站不能使用HTTPS的话,也请尽量将登录、注册等涉及密码的接口使用 HTTPS。

域名

应该尽量将API部署在专用域名之下。

https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

https://example.com/api/

版本

应该将API的版本号放入URL。

https://api.example.com/v1/

另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。

api.example.com/users
 
version=v1

路径

路径又称”终点”(endpoint),表示API的具体网址。

在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。

举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

HTTP动词

对于资源的具体操作类型,由HTTP动词表示。

常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

GET(SELECT):从服务器取出资源(一项或多项)。
 
POST(CREATE):在服务器新建一个资源。
 
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
 
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
 
DELETE(DELETE):从服务器删除资源。 read more

阅读全文

主流浏览器中如何清除HSTS设置

HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

Chrome、Opera:
  • 在地址栏输入“chrome://net-internals/#hsts”
  • 在“Delete domain”的输入框中输入域名
  • 点击“Delete”按钮
  • 在“Query domain”的输入框中输入刚才的域名
  • 点击“Query”按钮
  • 如果看到“Not found”则表示清除成功
  • read more

    阅读全文

    Laravel 获取执行的SQL语句

    获取最后执行的SQL语句:

    DB::enableQueryLog(); // 启用SQL查询日志
    
    $users = (new Users())->get();
    
    dd(DB::getQueryLog());

    将会得到像下面的结果:

    array(1) {
      [0]=>
      array(3) {
        ["query"]=>
        string(21) "select * from "users""
        ["bindings"]=>
        array(0) {
        }
        ["time"]=>
        string(4) "0.92"
      }
    }

    阅读全文

    Laravel 清除表单字段前后空白的Middleware

    1. 在Middleware目录创建类BeforeAutoTrimmer.php

    <?php

    namespace App\Http\Middleware;

    use Closure;

    class BeforeAutoTrimmer {
    /**
    * Handle an incoming request.
    *
    * @param \Illuminate\Http\Request $request
    * @param \Closure $next
    * @return mixed
    */
    public function handle($request, Closure $next){
    $input = $request->all();
    if ($input) {
    array_walk_recursive($input, function (&$item, $key) {
    // RULES 1 FOR STRING AND PASSWORD
    if (is_string($item) && !str_contains($key, ‘password’)) {
    $item = trim($item);
    }
    // RULES 2 FOR NULL VALUE
    $item = ($item == “”) ? null : $item;
    });
    $request->merge($input);
    }
    return $next($request);
    }
    } read more

    阅读全文

    Laravel5 如何验证路由中的变量

    1. 将路由中的变量添加到请求对象中,默认laravel的请求对象中不包含路由中的变量,我们重写all()方法即可
    /**
     * @return array
     */
    public function rules(){
        return [
            'slug' => 'required|exists:articles,slug',
        ];
    }
    
    /**
     * Add parameters to be validated
     * 
     * @return array
     */
    public function all(){
        return array_replace_recursive(
            parent::all(),
            $this->route()->parameters()
        );
    }
    2. 使用路由-模型绑定

    Route::bind(‘article_slug’, function ($slug) {
    return Article::published()->whereSlug($slug)->firstOrFail();
    });

    Route::get(‘articles/{article_slug}’, ‘ArticleController@show’); read more

    阅读全文

    Laravel5.1 表单数组验证

    Laravel5.2已经改进了表单的数组验证,所以该方法只针对Laravel5.1。

    创建Form Request类,可以使用Laravel的命令php artisan make:request创建

    修改rules函数,添加自定义验证

    public function rules(){
        $rules = array();
        $rules['content'] = 'required';
        $rules['attachments'] = 'array';
    
        $attachments = Input::file('attachments');
        foreach ($attachments as $key => $attachment) {
            $rules['attachments.' . $key] = 'image';
        }
        return $rules;
    }

    修改messages函数,添加自定义提示消息

    public function messages(){
    $messages = array();
    $messages[‘content.required’] = trans(‘users.form.content.required’);
    $messages[‘attachments.array’] = trans(‘users.form.attachments.array’);

    $attachments = Input::file(‘attachments’);
    foreach ($attachments as $key => $attachment) {
    $messages[‘attachments.’ . $key . ‘.image’] = trans(‘users.form.attachments.image’);
    }
    return $messages;
    } read more

    阅读全文
    Pages: 1 2 3 4 5 6 7