关于浏览器

浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源。这里资源一般是指 HTML 文档,图片等其他的类型。资源的位置由用户使用 URL(统一资源标示符)指定。

而浏览器的核心——渲染引擎便是负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。

工作流程:

 1. 输入URL地址或者点击URL的一个链接

 2. 浏览器根据URL地址,结合DNS,解析出URL对应的IP地址

   1)浏览器通过发送一个TCP的包,要求服务器打开连接

   2)服务器也通过发送一个包来应答客户端的浏览器,告诉浏览器可以发送数据给服务器

   3)发送HTTP请求

 4. 服务器接到请求后,返回相应的响应内容

 5. 浏览器解析从服务器端返回的响应内容,并且把页面显现出来

当输入URL之后,浏览器就要知道这个URL对应的IP是什么,只有知道了IP地址,浏览器才能准备的把请求发送到指定的服务器的具体IP和端口号上面。然后服务器端把响应结果发送到客户端。这个响应结果就是html的文档,不包含什么图片,脚本,CSS等的,也就是页面的html结构。下一步就是浏览器解析页面的过程,也就是一步步从上到下的解析html的骨架了。如果此时在html文档中,遇到了img标签,那么浏览器就会发送HTTP请求到这个img响应的URL地址去获取图片,然后呈现出来。

关于http协议

在Web应用中,服务器把网页的HTML代码发送给浏览器,让浏览器显示出来。这个由请求和响应构成的便是一个标准的客户端服务器模型,其中的传输协议便是HTTP。  

http协议特点:1)传输明文内容,安全性比较差

       2 ) 无状态协议(同一个客户端的这次请求同上次请求没有对应关系)

       

常见的请求头如下:

 Accept         text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection keep-alive
Cookie      Hm_lvt_dd4738b5fb302cb062ef19107df5d2e4=1481881726,1482225141; Hm_lpvt_dd4738b5fb302cb062ef19107df5d2e4=1483061342
Host       offlintab.firefoxchina.cn
Referer     http://offlintab.firefoxchina.cn/?cachebust=20150714 #指明该请求是从哪个关联连接而来
User-Agent    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0

常见的响应头如下:

 Age            865
Cache-Control  max-age=900
Content-Encoding gzip
Content-Length 2163
Content-Type application/json
Date        Fri, 30 Dec 2016 01:23:46 GMT
Etag        "584f7c52-1609" #服务端返回的响应数据的标识字段,客户端可根据此字段的值向服务器发送某URL是否更新的信息
Expires      Fri, 30 Dec 2016 01:28:26 GMT
Last-Modified   Tue, 13 Dec 2016 04:42:58 GMT
Server       nginx
X-Cache      HIT from SK-SQUIDWEB-18 #x-cache项指浏览器从何处、是在哪个代理缓存载入的网页文件
X-Cache-Lookup HIT from SK-SQUIDWEB-18:8080 #x-cache-lookup项指专门查看代理服务器中是否有某个网页缓存。有就返回HIT,没有返回MISS
X-Via       1.1 yangdxin66:10 (Cdn Cache Server V2.0)

Cookie和Session机制

Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

Session可以用Cookie来实现,也可以用URL回写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。

Cookie和Session有以下明显的不同点:

1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

 import urllib
import urllib2
import cookielib filename = 'cookie.txt'
#声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
'email': 'example@webscraping.com',
'password': 'example',
}) loginUrl = 'http://example.webscraping.com/user/login'
response = opener.open(loginUrl,postdata)
#保存cookie到cookie.txt中
cookie.save(ignore_discard=True, ignore_expires=True)
 import re
import requests def login():
url = 'http://example.webscraping.com/user/login' # 登陆地址
s = requests.Session() # 创建一个session,带着 session 去获取 key(表单隐藏值)
#print s
8 try:
get_res = s.get(url).text
get_key = re.findall(r'<input name="_formkey" type="hidden" value="(.*?)" />',get_res,re.S) # 正则匹配 key 的值
#print get_key[0] # 打印key值
data = {
'email': 'example@webscraping.com',
'password': 'example',
'_next': '/view/Aland-Islands-2',
'_formkey': get_key[0],
'_formname': 'login'
}
# 构造表单需要提交的数据
res_login = s.post(url, data=data).text # 尝试登陆
info = re.findall(r'<a class="dropdown-toggle" data-toggle="dropdown" href="#" rel="nofollow">(.*?)</a>',
res_login, re.S) print u'登陆成功!','Hi', info[0]
## End ##
except:
print u'登陆失败'
exit(0) if __name__ == '__main__':
login()

运行结果:

登陆成功! Hi Welcome Test Account

参考:http://blog.csdn.net/lmh12506/article/details/7794512

关于浏览器和HTTP协议的更多相关文章

  1. fiddler抓取火狐浏览器上https协议请求

    前言:现在很多网站采用https协议,当打开fiddler时.浏览https协议的网站会提示不安全,若使用fiddler抓取https协议的请求,则需要向浏览器导入证书,才能抓取https协议的请求, ...

  2. 浏览器通过Scheme协议启动APP中的页面

    在APP开发过程中,通过外部浏览器调起APP页面的场景也很普遍使用.下面就介绍一下通过外部H5页面唤起APP中页面的通用方法. 1.首先需要在AndroidMainifest.xml中对你要启动的那个 ...

  3. 【网络是怎么连接的】一、浏览器与HTTP协议

    浏览器: 1.生成HTTP消息: 1).网址结构: http://user:password@www.glasscom.com:80/dir/file1.htm 2).HTTP服务基本思路: a).请 ...

  4. 浏览器通过http协议通过nginx访问ftp服务器上的文件

    1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...

  5. web基础-web工作原理,http协议,浏览器缓存

    1,web工作原理 2,http协议 3,浏览器缓存 4,cookie和session -------------------------------------------------------- ...

  6. 深入理解HTTP协议(转) 浏览器和服务器如何通信(HTTP协议)

    http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...

  7. (二)Fiddler抓取Firefox、Chrome浏览器上的https协议

    Fiddler抓取Firefox.Chrome浏览器上的https协议 安装Fiddler后默认只抓取http协议,如果是https协议的话,浏览器就会提示"您的链接并不安全". ...

  8. C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序

    本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...

  9. 浏览器-http协议简介

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

随机推荐

  1. UVALive 6885 Flowery Trails

    两次SPFA #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...

  2. JavaScript 小技巧汇总

    判断一个变量是否申明 if (typeof v === "undefined") { // ... } 判断一个变量是否是函数 function f() {} typeof f / ...

  3. centos搭建nginx环境

    1.yum install  pcre* 2.wget http://nginx.org/download/nginx-1.7.8.tar.gz 3.tar -zxvf nginx-1.7.8.tar ...

  4. FusionCharts使用问题及解决方法(五)-FusionCharts常见问题大全

    在前4篇文章中,我们总结了FusionCharts XT图表使用中的一些常见问题(FAQ)及解决方法,本文继续讨论FusionCharts使用者常见的一些复杂报错及错误的调试/解决方法. 问题描述:是 ...

  5. UIApplication,UIWindow,UIViewController,UIView(layer)

    转载自:http://www.cnblogs.com/iCocos/p/4684749.html UIApplication,UIWindow,UIViewController,UIView(laye ...

  6. 安装tomcat过程中出现问题小结

    报错信息如下:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these ...

  7. HDU 1217 Arbitrage(Floyd的应用)

    给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易. 这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一.... #include< ...

  8. JavaFX 2.0+ WebView /WebEngine render web page to an image

    http://stackoverflow.com/questions/7796558/javafx-2-0-webview-webengine-render-web-page-to-an-image ...

  9. 算法录 之 BFS和DFS

    说一下BFS和DFS,这是个比较重要的概念,是很多很多算法的基础. 不过在说这个之前需要先说一下图和树,当然这里的图不是自拍的图片了,树也不是能结苹果的树了.这里要说的是图论和数学里面的概念. 以上概 ...

  10. javascript的 replace() 方法的使用讲解

    String.prototype.replace() The replace() method returns a new string with some or all matches of a p ...