关于浏览器

浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源。这里资源一般是指 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 ) 无状态协议(同一个客户端的这次请求同上次请求没有对应关系)

       

常见的请求头如下:

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

常见的响应头如下:

  1. Age         865
  2. Cache-Control  max-age=900
  3. Content-Encoding gzip
  4. Content-Length 2163
  5. Content-Type application/json
  6. Date        Fri, 30 Dec 2016 01:23:46 GMT
  7. Etag        "584f7c52-1609" #服务端返回的响应数据的标识字段,客户端可根据此字段的值向服务器发送某URL是否更新的信息
  8. Expires      Fri, 30 Dec 2016 01:28:26 GMT
  9. Last-Modified   Tue, 13 Dec 2016 04:42:58 GMT
  10. Server       nginx
  11. X-Cache      HIT from SK-SQUIDWEB-18 #x-cache项指浏览器从何处、是在哪个代理缓存载入的网页文件
  12. X-Cache-Lookup HIT from SK-SQUIDWEB-18:8080 #x-cache-lookup项指专门查看代理服务器中是否有某个网页缓存。有就返回HIT,没有返回MISS
  13. 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机制更安全些.因为它不会任意读取客户存储的信息。

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

运行结果:

  1. 登陆成功! 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. Issue 5158: Modal dialog present (UnexpectedAlertOpen) issue in IE (Similar issue like 3360)

    https://code.google.com/p/selenium/issues/detail?id=5158   Reported by mailtopa...@gmail.com, Feb 13 ...

  2. Mysql删除数据后磁盘空间未释放的解决办法【转】

    转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...

  3. 转 spring security的使用

    [转自:http://haohaoxuexi.iteye.com/blog/2154714] 关于登录 目录 1.1     form-login元素介绍 1.1.1    使用自定义登录页面 1.1 ...

  4. ext3文件系统目录限制问题

    昨晚排查了在KVM的build系统中的一个问题,跟踪到后面发现在一个目录下mkdir创建目录失败.我手动试了一下,提示如下:cannot create directory `/home/master/ ...

  5. 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集

    使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...

  6. Utils 工具 推送

    work_weipa_百度云推送 2014-09-05 17:55 7人阅读 评论(0) 收藏 举报 问题:怎么实现消息推送? 回答:下载sdk,根据文档操作即可 资料:http://develope ...

  7. PAT (Advanced Level) 1056. Mice and Rice (25)

    简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...

  8. Init.rc分析(刘举奎)

    http://www.360doc.com/content/14/0926/20/13253385_412582822.shtml

  9. FIR滤波器的实现方法(转)

    源:http://blog.sina.com.cn/s/blog_493520900102uy26.html 内容来自于上篇博文,第七章,FIR滤波器 http://blog.sina.com.cn/ ...

  10. 猜数游戏-flag的运用

    package my;import java.util.Scanner;public class MyJava {        public static void main(String[] ar ...