从HTTP讲起


如果让我讲讲什么是WEB,那我就会从HTTP讲起.
必须得做个比喻,用比喻才能通俗易懂,深入浅出.我会把WEB比喻成邮政系统,HTTP就是信封,Web页面就是信的内容.
HTTP是(超级无敌)广泛应用的的协议.但HTTP只关心信封的格式,不关心内容是什么.
让我们来看看一个例子,假如我们访问http://www.csdn.net/,会有什么事情发生呢?你会说:我会看到CSDN的主页.不不不,一切都发生的太快了,在你看到主页之前,你的浏览器和CSDN的服务器之间就已经发了一封信(严格来说不止一封).
你发的信的内容如下:(为了清晰起见,我省略了一些文字)
GET / HTTP/1.1
Host: csdn.net
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: __utma=17226283.828652889.1333962410.1334127206.1334156676.17; __utmz=1722628...
Cache-Control: max-age=0

我们来分析一下这个信封(不是信哦):
第一个单词GET,是HTTP method(HTTP方法).也有叫HTTP verb或者HTTP action,这个大概意思是一个动词,表示"我在干什么",GET的意思就是取东西.
第二个单词是 / (一个斜线), 对,你没看错,这也是一个单词,是路径的意思,大概会有类似 /index.html 这样的地址.表示页面的详细地址.
HTTP/1.1是HTTP协议的版本,这个东西无关紧要啦.然后你会发现剩下的行都是以一个单词开头,然后是冒号,后面跟着内容(这就是传说中的key-value pair(键值对)).这些就是传说中的request header(请求的头部).名字很怪异吧.一共有8个header,都是标准header,其实你也可以自定义header的.关于header的高深教程,请看:http://hi.baidu.com/bdui/blog/item/62a52a6658151a20ab184c04.html
信的内容是什么呢?信的内容就是没有内容!对于一个GET请求来说,这是很普遍的状况.

那么,服务器要回信了,我们看看他回的是什么

HTTP/1.1 200 OK
Server: nginx/0.7.68
Date: Wed, 11 Apr 2012 15:31:40 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: max-age=900
Content-Location: http://www.csdn.net/index.htm
Last-Modified: Wed, 11 Apr 2012 10:01:20 GMT
Etag: W/"d39399bca17cd1:197c"
X-UA-Compatible: IE=EmulateIE7
X-Powered-By: ASP.NET
Content-Encoding: gzip

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
...
<title>CSDN.NET - 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台</title>
...

看到那个200 OK 了吗? 200 就是HTTP response code(HTTP状态码),这个数字可能有很多种,大家最熟悉的可能就是404,表示查无此页面. 而200 表示ok,顺利的返回了东西.关于HTTP状态码的详尽描述,大家可以移歩http://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
下面的那些键值对就是response header了,其中的Date(日期)和Server(服务器)是服务器特有的.
body,也就是信的内容,就相当长了.这封信的主要内容是描述了这个页面应该如何显示.因为你刚刚向服务器发送了一个GET请求啊,服务器就返回给你这个页面的内容.就是这样.这个页面由浏览器来解析成一个很漂亮(或者很丑的画面).
有一个据说很重要的值,就是Content-Type(内容类型),比如这个内容的类型是text/html; charset=utf-8,代表纯文本,html,字符编码是utf-8.这样,浏览器才知道如何解析内容.常用的类型还有application/xml和image/jpeg.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值