@yangfch3
2015-09-06T15:31:28.000000Z
字数 3476
阅读 10543
http
目录
我们以www.facebook.com为例
得到域名对应的IP后,就开始发送HTTP(S)请求了.
请求头详解:
GET http://facebook.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: facebook.com
Cookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]
请求告诉服务器:
1. 我要获取(GET) http://facebook.com/(GET的URL)这个页面
2. Accept:我能接受这些类型的文件
3. 我使用的是何种操作系统上的哪个类型那个版本的浏览器
4. 承认接受何种方式的压缩文件
5. 连接类型:短连接?长连接?
6. 主机域名
7. 发送存储在本机的cookies信息给服务器
除了发送获取请求,还能发送提交响应请求(如:搜索时要把搜索的内容一并发给服务器进行处理(在请求URL后面增加特定的用户参数),以获取特定的内容)
注意:URL后面加斜杠与不加斜杠的区别(文件夹与单个文件的区别)
http://www.facebook.com
http://www.facebook.com/
当我们输入http://www.facebook.com时,浏览器会自动添加斜杠,保证URL的严谨。
当我们输入:http://www.facebook.com/folderOrFile 时,因为浏览器不清楚folderOrFile到底是文件夹还是文件,所以不能自动添加 斜杠。这时,浏览器就不加斜杠直接访问地址,服务器会响应一个重定向,结果造成一次不必要的握手。
当我们输入不完整的网址(http://facebook.com)时,或者网站迁移做了重定向设置时,服务器会进行一次重定向响应。
下面是重定向之后返回的响应头:
HTTP/1.1 301 Moved Permanently
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Location: http://www.facebook.com/
P3P: CP="DSP LAW"
Pragma: no-cache
Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;
path=/; domain=.facebook.com; httponly
Content-Type: text/html; charset=utf-8
X-Cnection: close
Date: Fri, 12 Feb 2010 05:09:51 GMT
Content-Length: 0
1. 301 永久重定向
2. 新的Location:……
为什么要重定向,而不直接返回用户想看的内容呢?(既然服务器已经经过重定向知道了用户需要什么)
答:原因之一:与搜索引擎排名有关。你看,如果一个页面有两个地址,就像http://www.igoro.com/ 和http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是 什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。
重定向之后会发布一个新的获取请求
- web服务器软件(如IIS或者Apache)接收到HTTP请求
- 确定执行那个请求处理程序(一个能读懂请求并且能生成HTML来进行响应的程序)(例如:Asp.Net,PHP,RUBY……)来处理[1]它
- 请求处理器阅读请求头的参数和cookies信息
- 更新服务器上的信息:例如更新数据库信息、服务端cookies
- 生成HTML,压缩(gzip或其他),响应请求发送给用户
响应包括响应头(响应参数与信息)、响应包(主体文件)
响应包采用特定方法压缩,整个响应以blob类型传输,响应头指示响应包以何种方式压缩
这个响应头与重定向的响应头不太一样,这个响应头还包含着缓存选项,cookies设置和隐私信息等
浏览器在没有完整接收全部HTML文件,就已经开始显示页面了
浏览器解析HTML遇到需要下载的文件时,便再次向服务器(CDN)发送获取文件的请求。
注意:
1. 动态页面无法缓存,静态文件允许浏览器进行缓存。
2. 静态文件本地有缓存时直接从本地读取
3. 请求响应头内包含着静态文件保存的期限,浏览器知道下载的静态文件要静默保留多久。
4. 响应头还会有静态文件的ETag(相当于版本号),当浏览器发现请求的静态文件的响应头的ETag与现有的缓存文件不符时,便会再次向服务器获取静态文件。
本篇笔记参考链接