3.26

Http的一些网上总结

在移动开发的过程中,网络的框架一般都是有大神封装好了,或者是直接用网上别人写好的
网络框架来写用,从而对底层的一些东西感到陌生,当然,如果做过后台的童鞋,请忽略我
今天说的。下面是我个人认为作为一名移动开发人员应该懂得的http的知识:
首先我们在http请求的时候,最为关注的就是http的header以上的信心了,那么http头在哪里呢?
HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关
的信息。
首先我们看下这个header在哪里:

当你在浏览器地址栏里键入一个url,你的浏览器将会类似如下的http请求:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5)
Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
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
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

第一行被称为“Request Line” 它描述的是这个请求的基本信息,剩下的就是HTTP headers了。

请求完成之后,你的浏览器可能会收到如下的HTTP响应:

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: “pub1259380237;gz”
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent

第一行呢被称为“Status Line”,它之后就是http headers,空行完了就开始输出内容了

下面我们具体看看请求的具体信息:
1. HTTP状态码
200 用来表示请求成功.(出现206 部分内容 (Partial Content)如果一个应用只请求某::;
范围之内的文件,那么就会返回206.这通常被用来进行下载管理,断点续传或者文件分块下载。)
300 来表示重定向.(302(或307)临时移动(Moved Temporarily) 和 301 永久移动(Moved Permanently))
400 用来表示请求出现问题.(404:代表没有找到 (Not Found),401 未经授权
(Unauthorized)
403 被禁止(Forbidden),)
500 用来表示服务器出现问题.

2.HTTP Headers 中的 HTTP请求
现在我们来看一些在HTTP headers中常见的HTTP请求信息。
A. Host:一个HTTP请求会发送至一个特定的IP地址,但是大部分服务器都有在同一IP地址下
托管多个网站的能力,那么服务器必须知道浏览器请求的是哪个域名下的资源。

B. User-Agent
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko
/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
这个头部可以携带如下几条信息:
浏览器名和版本号.
操作系统名和版本号.
默认语言.
这就是某些网站用来收集访客信息的一般手段。例如,你可以判断访客是否在使用手
机访问你的网站,然后决定是否将他们引导至一个在低分辨率下表现良好的移动网站。

C. Accept-Language
Accept-Language: en-us,en;q=0.5
这个信息可以说明用户的默认语言设置。如果网站有不同的语言版本,那么就可以通过
这个信息来重定向用户的浏览器。
它可以通过逗号分割来携带多国语言。第一个会是首选的语言,其它语言会携带一个
“q”值,来表示用户对该语言的喜好程度(0~1)。

D. Accept-Encoding
Accept-Encoding: gzip,deflate
大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会
压缩过的HTML发送给浏览器。这可以减少近80%的文件大小,以节省下载时间和带宽。

E. If-Modified-Since
如果一个页面已经在你的浏览器中被缓存,那么你下次浏览时浏览器将会检测文档是否被
修改过,那么它就会发送这样的头部:
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT
如果自从这个时间以来未被修改过,那么服务器将会返回“304 Not Modified”,而且不会
再返回内容。浏览器将自动去缓存中读取内容

F. Cookie
顾名思义,他会发送你浏览器中存储的Cookie信息给服务器。
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar
它是用分号分割的一组名值对。Cookie也可以包含session id。

G. Referer
顾名思义, 头部将会包含referring url信息。
例如,我访问Nettuts+的主页并点击了一个链接,这个头部信息将会发送到浏览器:
Referer: http://net.tutsplus.com/

H. Authorization
当一个页面需要授权,浏览器就会弹出一个登陆窗口,输入正确的帐号后,浏览器会
发送一个HTTP请求,但此时会包含这样一个头部:
Authorization: Basic bXl1c2VyOm15cGFzcw==
包含在头部的这部分信息是base64 encoded。例如,base64_decode(
‘bXl1c2VyOm15cGFzcw==’) 会被转化为 ‘myuser:mypass’ 。

HTTP Headers 中的 HTTP响应
A. Cache-Control
w3.org 的定义是:“The Cache-Control general-header field is used to specify
directives which MUST be obeyed by all caching mechanisms along the request/response
chain.” 其中“caching mechanisms” 包含一些你ISP可能会用到的 网关和代理信息。
例如:
Cache-Control: max-age=3600, public
“public”意味着这个响应可以被任何人缓存,“max-age” 则表明了该缓存有效的秒数。
允许你的网站被缓存降大大减少下载时间和带宽,同时也提高的浏览器的载入速度。
也可以通过设置 “no-cache” 指令来禁止缓存:
Cache-Control: no-cache

B. Content-Type
这个头部包含了文档的”mime-type”。浏览器将会依据该参数决定如何对文档进行解析。
例如,一个html页面(或者有html输出的php页面)将会返回这样的东西:
Content-Type: text/html; charset=UTF-8
‘text’ 是文档类型,‘html’则是文档子类型。 这个头部还包括了更多信息,例如 charset。
如果是一个图片,将会发送这样的响应:
Content-Type: image/gif
浏览器可以通过mime-type来决定使用外部程序还是自身扩展来打开该文档。
如下的例子降调用Adobe Reader:
Content-Type: application/pdf
直接载入,Apache通常会自动判断文档的mime-type并且添加合适的信息到头部去。
并且大部分浏览器都有一定程度的容错,在头部未提供或者错误提供该信息的情况下
它会去自动检测mime-type。
你可以在这里找到一个常用mime-type列表。

C. Content-Disposition
这个头部信息将告诉浏览器打开一个文件下载窗口,而不是试图解析该响应的内容。例如:
Content-Disposition: attachment; filename=”download.zip”

D. Content-Length
当内容将要被传输到浏览器时,服务器可以通过该头部告知浏览器将要传送文件的大小(bytes)。
Content-Length: 89123
对于文件下载来说这个信息相当的有用。这就是为什么浏览器知道下载进度的原因。

E. Etag
这是另一个为缓存而产生的头部信息。它看起来会是这样:
Etag: “pub1259380237;gz”
服务器可能会将该信息和每个被发送文件一起响应给浏览器。该值可以包含文档的最后修改日期,
文件大小或者文件校验和。浏览会把它和所接收到的文档一起缓存。下一次当浏览器再次请求同
一文件时将会发送如下的HTTP请求:
If-None-Match: “pub1259380237;gz”
如果所请求的文档Etag值和它一致,服务器将会发送304状态码,而不是2oo。并且不返回内容。
浏览器此时就会从缓存加载该文件

F. Last-Modified
顾名思义,这个头部信息用GMT格式表明了文档的最后修改时间:
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
modifytime=filemtime( file);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”, $modify_time) . ” GMT”);
它提供了另一种缓存机制。浏览器可能会发送这样的请求:
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT

G. Location
当一个网站需要设置或者更新你浏览的cookie信息时,它就会使用这样的头部

F. Content-Encoding
这个头部通常会在返回内容被压缩时设置。
Content-Encoding: gzip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值