• 彧豪
    2019-07-01
    上周五和服务端做上传图片的时候遇到过这个content-type的问题,上传图片时候我这边需要设置content-type:"image/jpg",然后传完了,我在预览的时候获取图片的地址,此时比如通过a标签的方式打开新标签预览该图片时才能成功预览,不然如果使用上传的js-sdk设置的默认类型:content-type:"octet-stream",那么浏览器就不认识这个图片了,转而会下载这个文件(图片),所以我是不是可以理解为content-type这字段在请求头,和响应头里都能使用?或者上传文件这个业务又不同于一般的请求操作呢?

    作者回复: 是的,看来是我没说清楚,导致有的同学误会了。

    content-type是实体字段,所以请求和响应里都可以用,作用是指明body数据的类型。

    正文里为了叙述方便,只在服务器的响应报文里出现了content-type,实际上它是个通用字段,如果要发post请求,就需要带上它。

    
     21
  • 苦行僧
    2019-07-02
    现在很多小文件 比如图片 都往云存上放了 千万指定正确content-type 一旦指定错 批量修改太麻烦 而且会影响终端的解析

    作者回复: 经验之谈!

    
     11
  • 亚洲舞王.尼古拉斯赵...
    2019-07-01
    1.含义是:我这个请求最希望服务器给我返回的编码方式是gzip和deflate,他们俩在我这是最优的地位,我不接受br的编码方式,如果还有其他的编码方式的话对我来说权重0.5。服务器可能的响应头是
    HTTP/1.1 200 OK
    Content-Encoding: gzip

    2.请求头可能是
    POST /serv/v1/user/auth HTTP/1.1
    Content-Type: application/json
    Accept-Language: zh-CN, zh
    Accept-Charset: gbk, utf-8
    3.MIME类比快递的话就是你要快递的物品(衣服,食物等),Encoding就是快递你这个物品的包装方式,如果是衣服可能就随意一点一个袋子,如果是食物担心腐烂给你放个冰袋进去
    不知道回答的对不对,请老师指正
    展开

    作者回复: 回答的不错。

    第二个问题要修改一下,这也怪我没有说清楚。

    content-*字段也可以用在请求报文里,说明请求体的数据类型。在这里不能用accept字段,因为是post,所以要用content-language来指明body的语言类型,在content-type里用charset指明编码类型。

    可以参考其他同学的回答。

    
     8
  • BellenHsin
    2019-07-01
    这篇写的不错

    作者回复: thanks。

    
     8
  • -W.LI-
    2019-07-01
    老师好!有个问题,之前遇到过一个发送ajax请求。前端忘记在content-type里面指定,application/json。后端接受数据失败。具体表现不太记得了好像都是null。后来前端加了content-type就好了。accept比较好理解就是发起请求放想要接受的内容。content-type是服务器,是响应类型的话。客户端在发送请求时压根就不知道啊,也不应该由客户端来设置。
    所以我想问的是,accept相关的都是请求头里面的数据
    content-type相关的都是响应头里的数据么?
    至于我前面正确的写法应该是在accept里面设置json类型。错写了content-type。框架做了兼容处理(在服务端看起来content-type起作用了)?
    谢谢老师
    展开

    作者回复: 客户端在发送请求的时候也有义务设置content-type,也应该是知道数据是什么类型的,你设置成json,服务器看到了就好处理。

    content-type是实体字段,请求响应里都可以出现。

    accept是告诉服务器,客户端支持什么类型,防止服务器发过来的数据不认识。

    
     5
  • MJ
    2019-07-05
    老师,每一个并发连接,都需要新建tcp三次握手吗?还是一次tcp握手后,可以并发多个连接?

    作者回复: 每建立一个连接就需要tcp握手,对同一个ip地址+端口,浏览器通常最多建立6个并发连接。

    
     4
  • -W.LI-
    2019-07-01
    老师好!那accept是不是有两个语意
    1.客户端希望接受(支持)的数据类型
    2.我发送的数据就是这个类型的。请用这些方式解析?
    问题:accept指定text。实际传的数据是一个json这样的后台会用text解析。然后拿不到数据是么?在请求头里加content -type这些字段会起作用么?

    作者回复: 1.accept是你说的第一个意思,没有第二个意思。

    2.第二个意思应该用Content-Type

    3.看后台逻辑如何处理,数据是肯定可以拿到的,而且json也属于text。

    4.在请求头里可以加content-type字段,表示请求体的数据类型。

    
     4
  • 走马
    2019-07-04
    accept 表达的是你想要的
    而你发送 post请求时,你发送的数据是给服务器的,这时候就需要像 服务器会用 content-type 标明它给你的数据类型一样,你也需要用 content- 来表明你给别人的数据的一些属性

    作者回复: √

    
     3
  • 1900
    2019-07-01
    “所以后来就出现了 Unicode 和 UTF-8,把世界上所有的语言都容纳在一种编码方案里,UTF-8 也成为了互联网上的标准字符集。”

    这句话最后有点问题吧?Unicode才是字符集,应该是“遵循UTF-8字符编码方式的Unicode字符集也成为了互联网上的标准字符集”,是么?

    作者回复: 嗯,我说的时候不太准确。utf-8只是编码方案,Unicode是字符集。

    
     3
  • 隰有荷
    2019-10-02
    用post方法请求接口时,在客户端语言的设置上不能使用Accept-Language吗?为什么一定是Contenr-Language呢?是不是Accept-Language只用于get方式时,表明客户端需要的的语言呢?

    作者回复: post和get时都可以使用Accept-Language,表示客户端可以理解的语言,要求服务器按照指示返回数据。

    Content-Language表示的是body数据的语言,因为post带有body,所以要用Content-Language来告诉服务器,报文的body是什么。

    如果get报文也有body,那么它也可以使用Content-Language。

    Accept-Language是请求头字段,只要是发请求就可以带。

    Content-Language是实体头字段,只要是有body就可以带。

    
     2
  • 啦啦啦
    2019-07-02
    不错不错,靠谱这篇,天天看这些参数一直不知道具体意思,今天老师讲了以后理解了

    作者回复: 继续努力。

    
     2
  • Geek_54edc1
    2019-07-01
    1.服务器优先按照gzip和deflate压缩,否则用其他压缩算法,但是不用brotli算法

    作者回复: √

    
     2
  • 啦啦啦
    2019-07-10
    二刷

    作者回复: 努力学习!

    
     1
  • aNught
    2019-07-09
    老师,您好,如果我accep-encoding填写了gzip,那服务端发来的报文是是gzip压缩过的吗,我需要解压才行是吗?

    作者回复: accep-encoding:gzip表示客户端支持gzip,但服务器发过来的是否经过压缩需要看content-encoding,也有可能不压缩。

    
     1
  • 响雨
    2019-07-04
    Content-type: application/json; charset=utf-8
    Accept-language: zh-CN
    python中的requests模块发送url请求,post时一定要在header中加上Content-type,不然会报错。
    老师,我在mime中放了1G的MP4视频,为什么只有声音没有画面啊。

    作者回复: 应该用content-language,post时应该用content*字段描述body的语言。

     1
     1
  • 聂成阳
    2019-07-03
    老师,我访问极客时间https://account.geekbang.org/dashboard/user它的请求头是这样的:
    POST /account/user HTTP/1.1
    Host: account.geekbang.org
    Connection: keep-alive
    Content-Length: 2
    Accept: application/json, text/plain, */*
    Origin: https://account.geekbang.org
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
    Content-Type: application/json
    Referer: https://account.geekbang.org/dashboard/buy
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
    为啥post也使用accept-*呢?
    展开

    作者回复: 发post请求,服务器也会有响应报文,所以就需要用accept头告诉服务器,客户端能够接受什么样的数据。

    否则服务器发过来一个pb或者msgpack,你就没法处理了。

    
     1
  • 啦啦啦
    2019-07-02
    今天凌晨买的课程,然后现在一口气看完了

    作者回复: 学习也要劳逸结合,有张有弛。

    
     1
  • 风翱
    2019-07-02
    1、gzip的权重为1,deflate权重为1,其他的为0.5,br拒绝。
    2、
    Accept:appliction/json
    Accept-Encoding:gzip,deflate
    Accept-Language:zh-CN,zh;q=0.8
    3、MIME类比快递中的物品类型,如:酒类、生鲜类、药品类等,Encoding类比现付、货到付款(好像不是很贴切)
    展开

    作者回复: 1对。

    2需要使用content-*字段,不能用accept字段,可参考其他同学的回答。

    3的比喻还差一点,换成外包装比较合适。

    
     1
  • 苦行僧
    2019-07-02
    content-type 千万不能填错 否则其他终端解析会存在问题

    作者回复: 好经验多分享。

    
     1
  • Geek_54edc1
    2019-07-01
    content-type: application/json; charset=gbk 如果有压缩用content-encoding指定下,使用的语言可以通过charset判断出来

    作者回复: 对,不过最好还是加上content-language。

     1
     1
我们在线,来聊聊吧