前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP请求之Content-Type

HTTP请求之Content-Type

作者头像
愧怍
发布2022-12-27 20:19:11
6050
发布2022-12-27 20:19:11
举报

Content-type

先看一条 HTTP 请求

代码语言:javascript
复制
POST https://xxx.kuizuo.cn/v2/login HTTP/1.1
Host: xxx.kuizuo.cn
Connection: keep-alive
Content-Length: 121
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
// Content-Type: application/json;charset=UTF-8
Accept: application/json, text/plain, */*

{"username":"kuizuo","password":"a12345678"}

上面那个请求发送到我的服务器,服务器却接收到的是这样一串值

代码语言:javascript
复制
{ "{\"username\":\"kuizuo\",\"password\":\"a12345678\"}": "" }

很显然,它把 json 格式解析成了 x-www-form-urlencoded。

一个很简单的登录请求,注意一个协议头Content-Type,它决定了你的数据发送到服务端上会是什么格式。

代码语言:javascript
复制
类型格式:type/subtype(;parameter)?
type 主类型,任意的字符串,如text,如果是*号代表所有;
subtype 子类型,任意的字符串,如html,如果是*号代表所有;
parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的charset参数。

常见的媒体格式类型如下:

  • text/html : HTML 格式
  • text/plain :纯文本格式
  • text/xml : XML 格式
  • image/gif :gif 图片格式
  • image/jpeg :jpg 图片格式
  • image/png:png 图片格式 以 application 开头的媒体格式类型:
  • application/xhtml+xml :XHTML 格式
  • application/xml : XML 数据格式
  • application/atom+xml :Atom XML 聚合格式
  • application/json : JSON 数据格式
  • application/pdf :pdf 格式
  • application/msword : Word 文档格式
  • application/octet-stream : 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded : form 表单数据被编码为 key/value 格式(通过=与&拼接)发送到服务器(表单默认的提交数据的格式)格式如: username=kuizuo&password=a12345678 另外一种常见的媒体格式是上传文件之时使用的:
  • multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式

实际上遇到最多的也就是 text/html,text/plain,application/json,application/x-www-form-urlencoded 这几个。

参考资料 Http 请求中 Content-Type

说说我那时候的情况

这是在我帮别人分析登录算法的时候,由于协议头中少添加了一个Content-Type,导致我发送的数据,服务端解析不了,收到了这样的响应

代码语言:javascript
复制
{ "code": 500001, "message": "亲,我们的系统目前忙碌中或无法回应,请将此问题回报给我们的客服人员。 错误代碼(68523)", "data": null }

然而实际响应应该是这样的

代码语言:javascript
复制
{ "code": 400020, "message": "密码错误", "data": "验证码错误" }

原因就是因为协议头没有添加Content-Type: application/json;charset=UTF-8所导致的。因为这个,坑了我近一个小时,还一直以为是数据错误,没想到仅仅只是少加了一些协议头导致的请求数据格式错误。

一个印象很深刻的教训,模拟 HTTP 请求的时候,一定不要吝啬补全协议头,不然坑的就是自己了。我已经给坑过两次了,所以在特意想借此记录一下,免得下次又是一番折腾。写个注意,醒目一点。

危险

发送的是 JSON 格式数据,切记一定要添加上协议头Content-Type: application/json;charset=UTF-8!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年12月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Content-type​
    • 说说我那时候的情况​
    相关产品与服务
    验证码
    腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档