有段时间没有接触HTTP协议的各种细节了。花了半个小时快速baidu回忆一下其中的重要知识,写的有点简陋:
1. HTTP协议有GET, POST, DETETE, PUT等,工八种。其中针对REST风格的请求,常用的GET, POST, PUT,DETETE对应查询、新增、修改、删除。当然这也不是绝对的。
2. HTTP协议请求报文包含三部分: 请求行,请求头和请求体。其中请求行和请求头统一采用ascii编码,不然客户端,服务端通信就乱套了。而请求体的编码方式则是可以随意设置的,只要再请求头的Content-Type 参数指定一下就可以了,比如可以设置:
Content-Type:text/html;charset=utf-8
3. 请求头的Content-Type除了指定请求体的字符编码,也可以指定请求体类型,常见的有如下四种:
application/x-www-form-urlencoded: 用于传统表单提交
multipart/form-data:常用于文件上传
application/json:请求体是json串。常用于前后端分离程序,请求通过javascript的ajax请求发送
text/xml:XML-RPC, XML 作为编码方式的远程调用规范
具体参考以下文档。
https://imququ.com/post/four-ways-to-post-data-in-http.html
4. URL encoding:
对于通过get方式提交的表单,URL中的参数值含有ASCII码表中的保留字符(特殊意义字符),中文等,浏览器会对他们进行自动编码。
而对于通过java script的ajax发送的请求,需要通过js的方法手工编码。
至于为什么要编码以及浏览器如何实现get方式提交表单时实现自动编码,可参考如下文档:
https://www.cnblogs.com/jerrysion/p/5522673.html
https://blog.csdn.net/weixin_45873215/article/details/111094283