0

根据我的理解:

Accept 标头用于HTTP clients告诉服务器他们将接受哪些内容类型。然后服务器将发回一个响应,其中将包含一个 Content-Type 标头,告诉客户端返回的内容的实际内容类型是什么。

有了这种理解,我尝试了以下方法:

curl -X GET -H "Accept: application/xml" http://www.google.com -v

* About to connect() to www.google.com port 80 (#0)
*   Trying 173.194.33.81...
* connected
* Connected to www.google.com (173.194.33.81) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8y zlib/1.2.5
> Host: www.google.com
> Accept: application/xml
> 
< HTTP/1.1 200 OK
< Date: Tue, 02 Sep 2014 17:58:05 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< Set-Cookie: PREF=ID=5c30672b67a74789:FF=0:TM=1409680685:LM=1409680685:S=PsGclk3vR4HWjann; expires=Thu, 01-Sep-2016 17:58:05 GMT; path=/; domain=.google.com
< Set-Cookie: NID=67=rPuxpwUu5UNuapzCdbD5iwVyjjC9TzP_Ado29h3ucjEq4A_2qkSM4nQM3RO02rfyuHmrh-hvmwmgFCmOvISttFfHv06f8ay4_6Gl4pXRjqxihNhJSGbvujjDRzaSibfy; expires=Wed, 04-Mar-2015 17:58:05 GMT; path=/; domain=.google.com; HttpOnly
< P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Alternate-Protocol: 80:quic
< Transfer-Encoding: chunked
< 
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"><

正如您在回复中注意到的那样,我收到的Content-Type: text/html; charset=ISO-8859-1不是我要求的?

为什么HTML发送不同的表示(在这种情况下),尽管我要求xml

谢谢

4

1 回答 1

1

来自RFC 2616

如果存在 Accept 头字段,并且如果服务器无法发送根据组合 Accept 字段值可接受的响应,则服务器应该发送 406(不可接受)响应。

在这里,“应该”意味着 Google 实际上没有义务抛出 406 错误。但是由于您收到的是 HTML 响应,因此它实际上具有相同的含义。

于 2014-09-02T18:06:35.367 回答