0x01.About
查看Restful API 报头插件:Chrome插件REST Console,以及发送Restful API工具:Chrome插件POST Man
在HTTP 1.1规范中,HTTP请求方式有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT
通常我们用的只有GET、POST,然而对于Restful API规范来说,请求资源要用PUT方法,删除资源要用DELETE方法。
例如发送个DELETE包:
http://example.com/my/resource?id=12345
那么通过id就能获取到信息,这个包只有header,并不存在body,下面讨论几个包含body的发包的body传输格式。
0x02.Content-Type
Content-Type用于指定内容类型,一般是指网页中存在的Content-Type,Content-Type属性指定请求和响应的HTTP内容类型。如果未指定 ContentType,默认为text/html。
在nginx中有个配置文件mime.types
,主要是标示Content-Type的文件格式。
下面是几个常见的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的发包方式。
0x03.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.8Accept-Encoding:gzip, deflateAccept-Language:zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,gl;q=0.2,de;q=0.2Cache-Control:no-cacheConnection:keep-aliveContent-Length:17Content-Type:application/x-www-form-urlencoded
那么服务器收到的raw body会是,name=homeway&key=nokey
,在php中,通过$_POST就可以获得数组形式的数据。
0x04.multipart/form-data
multipart/form-data
用在发送文件的POST包。
这里假设我用python的request发送一个文件给服务器:
data = { "key1": "123", "key2": "456", } files = {'file': open('index.py', 'rb')} res = requests.post(url="http://localhost/upload", method="POST", data=data, files=files) print res
通过工具,可以看到我发送的数据内容如下:
POST http://www.homeway.me HTTP/1.1Content-Type:multipart/form-data; boundary=------WebKitFormBoundaryOGkWPJsSaJCPWjZP ------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="key2"456------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="key1"123------WebKitFormBoundaryOGkWPJsSaJCPWjZP Content-Disposition: form-data; name="file"; filename="index.py"
这里Content-Type
告诉我们,发包是以multipart/form-data
格式来传输,另外,还有boundary
用于分割数据。
当文件太长,HTTP无法在一个包之内发送完毕,就需要分割数据,分割成一个一个chunk发送给服务端,
那么--
用于区分数据快,而后面的数据633e61ebf351484f9124d63ce76d8469
就是标示区分包作用。
0x05.text/xml
微信用的是这种数据格式发送请求的。
POST http://www.homeway.me HTTP/1.1 Content-Type: text/xml<?xml version="1.0"?><resource> <id>123</id> <params> <name> <value>homeway</value> </name> <age> <value>22</value> </age> </params></resource>
php中$_POST
只能读取application/x-www-form-urlencoded
数据,$_FILES
只能读取multipart/form-data
类型数据,
那么,要读取text/xml
格式的数据,可以用:
$file = fopen('php://input', 'rb'); $data = fread($file, length); fclose($file);
或者
$data = file_get_contents('php://input');
0x06.application/json
通过json形式将数据发送给服务器,一开始,我尝试通过curl,给服务器发送application/json
格式包,
然而我收到的数据如下:
--------------------------e1e1406176ee348a Content-Disposition: form-data; name="nid" 2 --------------------------e1e1406176ee348a Content-Disposition: form-data; name="uuid" cf9dc994-a4e7-3ad6-bc54-41965b2a0dd7 --------------------------e1e1406176ee348a Content-Disposition: form-data; name="access_token" 956731586df41229dbfec08dd5d54eedb98d73d2 --------------------------e1e1406176ee348a--
后来想想明白了,HTTP通信中并不存在所谓的json,而是将string转成json罢了,也就是,application/json
可以将它理解为text/plain
,普通字符串。
之所以出现那么多乱七八糟的-------
应该是php数组传输进去,存在的转换问题吧
以上是如何理解HTTP中的Content-Type的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

如何在Quartz中提前发送任务通知在使用Quartz定时器进行任务调度时,任务的执行时间是由cron表达式设定的。现�...

在JavaScript中如何获取原型链上函数的参数在JavaScript编程中,理解和操作原型链上的函数参数是常见且重要的任�...

在微信小程序web-view中使用Vue.js动态style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何对多个链接进行并发GET请求并依次判断返回结果?在Tampermonkey脚本中,我们经常需要对多个链...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中