http报文格式(Content-Type)
http报文格式
HTTP请求报文由3部分组成(请求行+请求头+请求体):
请求行
①是请求方法,GET和POST是最常见的HTTP方法,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE。
②为请求对应的URL地址,它和报文头的Host组成完整的请求URL。
③是协议名称及版本号。
请求头
请求头包含若干个客户端属性信息。
请求体
请求体用于传输真正所需的数据(可以放POST请求参数或者是文件数据),图示请求体将一个页面表单(POST方式)中的组件值通过 param1=value1¶m2=value2 的键值对形式编码成一个格式化串,用于传递多个请求参数。不但请求体可以传递请求参数,请求URL也可以通过类似于“/chapter15/user.html? param1=value1¶m2=value2”的方式传递请求参数。
同理,http响应也可以分为响应行、响应头和响应体三部分
Content-Type 报文体内容类别
http的请求头部分有一个属性叫**Content-Type,**Content-Type用于表明请求体中数据的编码类型,服务器根据编码类型使用对应的解析方式,获取数据流中的数据。(Gin的ctx.PostForm方法只能解析表单格式编码的数据,无法用解析以json格式编码的数据)
Content-Type有以下类型:
-
常见的页面资源类型:text/html, text/plain, text/css, text/javascript, image/jpeg, image/png, image/gif
-
表单提交或上传文件的常用的资源类型:
- application/x-www-form-urlencoded。原生form默认的提交方式(最常用),默认情况下表单数据会编码为该类型。此时提交的数据将会格式化成类似username=111&age=2的形式。
- multipart/form-data。改类型不对字符编码,上传文件时使用。
- application/json。用于传递复杂的json对象(form形式的键值对太简陋,无法传递对象嵌套或者数组类型的数据。
补充跨域问题:跨域是指我们访问一个网站,如:http://127.0.0.1:8000这个url,从这个页面中又去访问http://127.0.0.1:9000这个url,这个时候就引发了跨域,当协议、域名、端口其中任意一个不同都会引发跨域。 此时9000端口的服务端可以接收到请求,也会给浏览器响应数据,但是到达浏览器后就被拦截了,因为浏览器的同源策略。
前后端分离开发的时候,就会遇到跨域的问题,一般可以通过前端部分设置代理的方法解决。