公认的答案非常实用。确保你看到它。但是我将深入讨论两个基本差异:
1 - 了解发出 HTTP 请求时它们各自的放置位置
URL 不同于 HTTP 消息。HTTP 消息可以是Request或Response。在这个答案中,我将专注于请求。
一个 HTTP 请求主要由 url、http-method、http-headers 组成(其中还有其他块,但我只是提到我们最关心的那些)
Request = Request-Line ; Section 5.1
*(( general-header ; Section 4.5
| request-header ; Section 5.3
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 4.3
请求行是:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
CLRF
就像一条新线。
有关更多信息,请参见此处和此处。您可能必须在链接之间来回做一些事情,直到正确为止。如果您真的想深入了解,请参阅此RFC
所以基本上一个请求是这样的:
POST /cgi-bin/process.cgi?tag=networking&order=newest HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: 60
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
first=Zara&last=Ali
查询参数在URL 中。HTTP 标头不是 URL 的一部分。它们是 HTTP 消息的一部分。在上面的例子中,查询参数是tag=networking&order=newest
,标题是:
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: 60
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
因此,当您发出网络请求时,您正在制作一个使用 http 协议格式化的字符串。该字符串是通过 TCP 连接发送的
2 - 了解虽然两者都可以用来交流事物,但为什么以及在哪里更喜欢另一个
来自与 Rob 在聊天中的讨论:
标准是,如果它是关于请求或关于客户端的信息,那么标头是合适的。
但如果它是请求本身的内容(例如,您从服务器请求的内容、标识要返回的项目的一些详细信息、要保存在 Web 服务器上的一些详细信息等),那么它就是一个参数,例如:
参数
假设您正在请求产品的图像。产品id可以是一个参数。图像大小(缩略图与全尺寸)可能是另一个参数。产品 ID 和请求的图像大小是作为请求内容的一部分提供的“某些细节”(或参数)的示例。
Header
但是请求之类的东西是 JSON 或者x-www-form-urlencoded
不是请求的内容,而是关于请求的元数据(特别是因为 Web 服务需要知道如何解析请求的主体)。这就是为什么它是一个标题。
如果您的应用程序发出各种请求,最有可能的是,它的标头会有很多共同点。但是,由于它们是基于内容的,因此参数应该更加多样化。