15 | 海纳百川:HTTP的实体数据
15 | 海纳百川:HTTP的实体数据
讲述:Chrono
时长11:54大小13.61M
数据类型与编码
数据类型使用的头字段
语言类型与编码
语言类型使用的头字段
内容协商的质量值
内容协商的结果
动手实验
小结
课下作业
赞 40
提建议
精选留言(67)
- 彧豪2019-07-01上周五和服务端做上传图片的时候遇到过这个content-type的问题,上传图片时候我这边需要设置content-type:"image/jpg",然后传完了,我在预览的时候获取图片的地址,此时比如通过a标签的方式打开新标签预览该图片时才能成功预览,不然如果使用上传的js-sdk设置的默认类型:content-type:"octet-stream",那么浏览器就不认识这个图片了,转而会下载这个文件(图片),所以我是不是可以理解为content-type这字段在请求头,和响应头里都能使用?或者上传文件这个业务又不同于一般的请求操作呢?展开
作者回复: 是的,看来是我没说清楚,导致有的同学误会了。 content-type是实体字段,所以请求和响应里都可以用,作用是指明body数据的类型。 正文里为了叙述方便,只在服务器的响应报文里出现了content-type,实际上它是个通用字段,如果要发post请求,就需要带上它。
共 2 条评论92 - 走马2019-07-04accept 表达的是你想要的 而你发送 post请求时,你发送的数据是给服务器的,这时候就需要像 服务器会用 content-type 标明它给你的数据类型一样,你也需要用 content- 来表明你给别人的数据的一些属性
作者回复: √
共 4 条评论39 - 亚洲舞王.尼古拉斯赵...2019-07-011.含义是:我这个请求最希望服务器给我返回的编码方式是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指明编码类型。 可以参考其他同学的回答。
共 5 条评论34 - 隰有荷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就可以带。
30 - 苦行僧2019-07-02现在很多小文件 比如图片 都往云存上放了 千万指定正确content-type 一旦指定错 批量修改太麻烦 而且会影响终端的解析
作者回复: 经验之谈!
共 2 条评论27 - MJ2019-07-05老师,每一个并发连接,都需要新建tcp三次握手吗?还是一次tcp握手后,可以并发多个连接?
作者回复: 每建立一个连接就需要tcp握手,对同一个ip地址+端口,浏览器通常最多建立6个并发连接。
22 - 19002019-07-01“所以后来就出现了 Unicode 和 UTF-8,把世界上所有的语言都容纳在一种编码方案里,UTF-8 也成为了互联网上的标准字符集。” 这句话最后有点问题吧?Unicode才是字符集,应该是“遵循UTF-8字符编码方式的Unicode字符集也成为了互联网上的标准字符集”,是么?
作者回复: 嗯,我说的时候不太准确。utf-8只是编码方案,Unicode是字符集。
17 - BellenHsin2019-07-01这篇写的不错
作者回复: thanks。
共 2 条评论12 - do it2020-05-201、试着解释一下这个请求头“Accept-Encoding: gzip, deflate;q=1.0, *;q=0.5, br;q=0”,再模拟一下服务器的响应头。 :最好使用gzip,deflate压缩格式,我不接受br压缩,如果都没有的话就选择其他格式 2、假设你要使用 POST 方法向服务器提交一些 JSON 格式的数据,里面包含有中文,请求头应该是什么样子的呢? content-type: application/json, charset=gbk content-language:zh-cn, zh 3、试着用快递发货收货比喻一下 MIME、Encoding 等概念。 物品的种类(水果、衣服)就是MIME,包装方式就是Encoding展开
作者回复: 回答的很好,继续努力。
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 - 钱2020-03-29做web开发有两个问题,估计许多人都遇到过,一个是乱码问题,这个是字符集设置不一致导致的具体哪里设置的不一致通常需要观察所有需要数据转换的地方,一般是客户端和服务器端不一致了。另外,就是文件上传,这个格式一定要设置对,否则就会感到莫名其妙。 我想请教老师两个问题: 1:看到说浏览器最多会有六个连接并发执行,为什么是六个,不会是因为六六大顺吧? 2:文件上传的速度和文件的大小密切相关,文件上传的大小限制都是有哪些限制或控制?之前,这是老早了,发现有些框架默认只能是2g展开
作者回复: 1.这个是rfc的规定,其实以前还要小。 2.http协议对大小没有限制,这些应该都是网站服务器做的限制,比如Nginx就可以设置client body的大小。
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 - Jinlee2020-05-071. 含义:服务器,你返回的数据编码方式最好是gzip或者deflate,实在不行返回其他的编码方式也行,但是,我不接受br类型的数据编码方式 模拟服务器响应头: HTTP/1.1 200 OK Content-Encoding: gzip 2. 请求头: POST / HTTP/1.1 Content-type:text/json; chartset=GBK, utf-8 3. 收发快递比喻: MIME type就是要发收的具体物品,如文件、生鲜、衣物等。Encoding就是快递的包装方式,如果是文件呢,那我就用专用文件袋给你寄过去;如果是生鲜,那我就给你套个保鲜泡沫寄过去;如果是衣物,那我就给你个一般的快递包装寄过去。 参考其他优秀同学的答案😬展开
作者回复: 回答的很好。 第二个问题,少了个content-language,而且charset不能同时使用两种编码。
共 2 条评论3 - 啦啦啦2019-07-02不错不错,靠谱这篇,天天看这些参数一直不知道具体意思,今天老师讲了以后理解了
作者回复: 继续努力。
3 - 兔嘟嘟2021-07-20罗老师,我不是很能理解accept-language这类字段的意义,因为我们开发前后端肯定是有一套接口文档的,里面约定了各种开发细节,前后端应该使用什么编码什么语言,为何还要在报文里去提accept-language? 总不能前端写好了,发送一个报文给后端,后端程序员慢慢看里面的字段,再开始后端的编程吧?
作者回复: http协议当初设计的时候可没有考虑过前后端开发的问题,它的目标是给互联网上的各种人群去阅读,所以就需要有语言编码。 在你说的开发领域,前后端都约定好了,自然就不需要用accept-language来交换信息了,但对于普通的浏览网页来说,还是要用这个字段的。
共 2 条评论2 - 蓝配鸡2019-10-29试着解释一下这个请求头“Accept-Encoding: gzip, deflate;q=1.0, *;q=0.5, br;q=0”,再模拟一下服务器的响应头。 我希望用GZIP或者deflate压缩算法,实在不行给我其他的算法也行,但千万别给我br压缩过的数据,我这边可不会这个算法! 假设你要使用 POST 方法向服务器提交一些 JSON 格式的数据,里面包含有中文,请求头应该是什么样子的呢? content-type: zh-CN, zh, charset=utf-8, application/json 试着用快递发货收货比喻一下 MIME、Encoding 等概念。 比如说我想在某宝上买乐高, MIME 确定了我购买的乐高种类,是成品呢, 还是零散的需要自己拼装。 Encoding好比这个乐高的包装方式,某宝可以选择把所有的乐高零件全都放在一个包装里, 也可以分模块把零件放在不同的包装里。 我也可以主动告诉某宝我想要哪一种包装方式。展开
作者回复: good,很勤奋啊。
2 - aNught2019-07-09老师,您好,如果我accep-encoding填写了gzip,那服务端发来的报文是是gzip压缩过的吗,我需要解压才行是吗?
作者回复: accep-encoding:gzip表示客户端支持gzip,但服务器发过来的是否经过压缩需要看content-encoding,也有可能不压缩。
2 - 苦行僧2019-07-02content-type 千万不能填错 否则其他终端解析会存在问题
作者回复: 好经验多分享。
2 - djfhchdh2019-07-011.服务器优先按照gzip和deflate压缩,否则用其他压缩算法,但是不用brotli算法
作者回复: √
2 - 搏未来2021-03-07Accept表示客户端能接受什么,Content-*表示提供的具体信息,由于客户端与服务端都可以提供信息,所以Content-*是可以在两端都可以用的。
作者回复: 总结的很到位!
1