Bootstrap

HTTP 响应头信息与前后端交互时content-type重要性

以下是响应头的大部分属性

响应头信息中文翻译描述
Date日期响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT
Server服务器服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)
Content-Type内容类型响应体的媒体类型(MIME类型),如text/html; charset=UTF-8, application/json等。
Content-Length内容长度响应体的大小,单位是字节。例如:3145
Content-Encoding内容编码响应体的压缩编码,如 gzip, deflate等。
Content-Language内容语言响应体的语言。例如:zh-CN
Content-Location内容位置响应体的 URI。例如:/index.html
Content-Range内容范围响应体的字节范围,用于分块传输。例如:bytes 0-999/8000
Cache-Control缓存控制控制响应的缓存行为, 如 no-cache 表示必须重新请求。
Connection连接管理连接的选项,如keep-alive或close,keep-alive 表示连接不会在传输后关闭
Set-Cookie设置 Cookie设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure
Expires过期时间响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT
Last-Modified最后修改时间资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT
ETag实体标签资源的特定版本的标识符。例如:“33a64df551425fcc55e6”
Location位置用于重定向的 URI。例如:/newresource
Pragma实现特定的指令包含实现特定的指令,如 no-cache。
WWW-Authenticate认证信息认证信息,通常用于HTTP认证。例如:Basic realm=“Access to the site”
Accept-Ranges接受范围指定可接受的请求范围类型。例如:bytes
Age经过时间响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24
Allow允许方法列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等
Vary变化告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept
Strict-Transport-Security严格传输安全指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains
X-Frame-Options框架选项控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN
X-Content-Type-Options内容类型选项指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff
X-XSS-ProtectionXSS保护控制浏览器的 XSS 过滤和阻断。例如:1; mode=block
Public-Key-Pins公钥固定HTTP 头信息用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256=“base64+primarykey”; pin-sha256=“base64+backupkey”; max-age=expireTime

在做前后端交互的时候需要注意的主要有age,allow,set-cookie,expires,Content-Type这几个字段
之中特别需要注意的是content-type
如果你写过后端,碰巧用的是java servlet的话,你一定用过这个方法 req.getParameter(“”);
如果你是下面情况
在这里插入图片描述
当你与前端交流的话你可能会读不到这个值
这个需要前端使用content-type:application/x-www-form-urlencoded
这个协议主要处理参数比较少的请求,请求体大的话一般用application/json

今天我就碰到了,当我使用如下代码时

const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/s', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
const data={
	id:'10'
}
xhr.send(JSON.stringfy(date));

这个是没有用的,虽然我请求头的content-type是这个,但是我的请求体格式却是application/josn格式
这个需要专门的参数

const formData = new URLSearchParams();
formData.append('id', '10');
const xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/s', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(formData.toString());

这样才是对的,
如果你需要上传图片等资源时,往往需要换成multipart/form-data
而参数体就需要换成下面的

  let formData = new FormData()
  formData.append('file', file.raw)// 传文件
  ...
  xml.send(formData);

其他的我就不过多讲解了,与后端讨论后如果有不会的直接上网搜这块,搜素范围给你缩小了,

;