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 に答える