内容类型
这向服务器表明您在请求正文中发送的数据类型(即 POST 数据)。您问题application/x-www-form-urlencoded
中的值用于提交 HTML 表单,其中输入数据以键值形式发送,例如:
xmlHttp.send("firstName=bob&lastName=Smith&age=43")
这些值应该是URL 编码(又名百分比编码),以防止任何特殊字符破坏格式。如果你在 POST 请求中发送这种类型的数据而不设置内容类型,大多数服务器都会检测到数据类型并无论如何都会处理它。设置它是一种很好的做法(不要产生歧义),即使它并不总是必需的。
JSON 数据可以作为 发送application/x-www-form-urlencoded
,您只需使用一个键并将值设置为 JSON。
myData={"firstName":"bob","age":"43"}
上面的 JSON 应该是 URL 编码的,在 Javascript 中你可以使用encodeURIComponent()
,我在示例中没有对其进行编码,目的是使它在这里可读。这是发送 POST 数据的最常见格式,大多数服务器端语言会自动将键值对解析为原生数组或某种结构。
或者,您可以将 JSON 作为请求正文直接发送,不带密钥或其他数据标签。例子:
xmlHttp.send('{"firstName":"bob","age":"43"}');
使用这种方式,您应该将 Content-type 设置为application/json
但同样,大多数服务器将在没有它的情况下处理它,因为就 HTTP 请求而言,它只是文本数据。在服务器端,您需要访问原始 POST 数据以获取 JSON。大多数服务器端语言都可以让您访问原始帖子数据。
内容长度
与内容类型一样,最好设置内容长度。它告诉服务器您正在发送多少数据,因此服务器更容易知道何时收到所有数据。也就是说,如果没有设置它通常不会引起问题,但是 W3 文档声明它应该被使用。
连接:关闭
发送close
连接标头向服务器表明您不支持,或者不想对请求使用持久连接。服务器可能会用一个Connection: Keep-alive
标头进行响应,这并不告诉客户端保持连接打开,它只是向客户端指示它支持持久连接。持久连接允许对多个请求重用相同的 TCP 连接,而不是为每个请求打开和关闭。无需在 ajax 请求中设置此标头。如果您不设置它,浏览器将自行决定并设置它。
概括
总而言之,Connection
不需要,Content-length
应该使用。Content-type
应该使用,但取决于服务器和服务器端代码,它可能不需要。