返回介绍

2.3 HTTP 协议

发布于 2024-01-20 15:41:04 字数 2953 浏览 0 评论 0 收藏 0

URL的请求协议几乎都是HTTP,它是一种无状态的请求响应,即每次的请求响应之后,连接会立即断开或延时断开(保持一定的连接有效期),断开后,下一次请求再重新建立。这里举一个简单的例子,对http://www.foo.com/发起一个GET请求:

GET http://www.foo.com/ HTTP/1.1
Host: www.foo.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) 
AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.3 Safari/535.19
Referer: http://www.baidu.com
Accept: text/html,application/xhtml
+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1

响应如下:

HTTP/1.1 200 OK
Date: Sun, 04 Mar 2012 22:48:31 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 
1970 00:00:00 GMT; path=/;
domain=.foo.com; HttpOnly
Set-Cookie: USERID=c7888882e039b32fd7b4d3; 
expires=Tue, 01 Jan 2030
00:00:00 GMT; path=/; domain=.foo.com
X-Powered-By: PHP/5.2.6
Content-Length: 3635
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=gbk
<html>
...
</html>

请求与响应一般都分为头部与体部(它们之间以空行分隔)。对于请求体来说,一般出现在POST方法中,比如表单的键值对。响应体就是在浏览器中看到的内容,比如,HTML/JSON/JavaScript/XML等。这里的重点在这个头部,头部的每一行都有自己的含义,key与value之间以冒号分隔,下面看看几个关键点。

请求头中的几个关键点如下。

GET http://www.foo.com/ HTTP/1.1

这一行必不可少,常见的请求方法有GET/POST,最后的“HTTP/1.1”表示1.1版本的HTTP协议,更早的版本有1.0、0.9。

Host: www.foo.com

这一行也必不可少,表明请求的主机是什么。

User-Agent: Mozilla/5.0 (Windows NT 6.1) 
AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.3 Safari/535.19

User-Agent很重要,用于表明身份(我是谁)。从这里可以看到操作系统、浏览器、浏览器内核及对应的版本号等信息。

Referer: http://www.baidu.com/

Referer很重要,表明从哪里来,比如从http://www.baidu.com/页面点击过来。

Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1

前面说HTTP是无状态的,那么每次在连接时,服务端如何知道你是上一次的那个?这里通过Cookies进行会话跟踪,第一次响应时设置的Cookies在随后的每次请求中都会发送出去。Cookies还可以包括登录认证后的身份信息。

响应头中的几个关键点如下。

HTTP/1.1 200 OK

这一行肯定有,200是状态码,OK是状态描述。

Server: Apache/2.2.8 (Win32) PHP/5.2.6

上述语句透露了服务端的一些信息:Web容器、操作系统、服务端语言及对应的版本。

X-Powered-By: PHP/5.2.6

这里也透露了服务端语言的信息。

Content-Length: 3635

响应体的长度。

Content-Type: text/html;charset=gbk

响应资源的类型与字符集。针对不同的资源类型会有不同的解析方式,这个会影响浏览器对响应体里的资源解析方式,可能因此带来安全问题。字符集也会影响浏览器的解码方式,同样可能带来安全问题。

Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 
1970 00:00:00 GMT; path=/;
domain=.foo.com; HttpOnly; Secure
Set-Cookie: 
USERID=c7888882e039b32fd7b4d3; expires=Tue, 
01 Jan 2030
00:00:00 GMT; path=/; domain=.foo.com

每个Set-Cookie都设置一个Cookie(key=value这样),随后是如下内容。

expires:过期时间,如果过期时间是过去,那就表明这个Cookie要被删。

path:相对路径,只有这个路径下的资源可以访问这个Cookie。

domain:域名,有权限设置为更高一级的域名。

HttpOnly:标志(默认无,如果有的话,表明Cookie存在于HTTP层面,不能被客户端脚本读取)。

Secure:标志(默认无,如果有的话,表明Cookie仅通过HTTPS协议进行安全传输)。

请求响应头部常见的一些字段都有必要了解,这是我们在研究Web安全时对各种HTTP数据包分析的必备知识。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文