关于浏览器和HTTP协议
关于浏览器
浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源。这里资源一般是指 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协议的更多相关文章
- fiddler抓取火狐浏览器上https协议请求
前言:现在很多网站采用https协议,当打开fiddler时.浏览https协议的网站会提示不安全,若使用fiddler抓取https协议的请求,则需要向浏览器导入证书,才能抓取https协议的请求, ...
- 浏览器通过Scheme协议启动APP中的页面
在APP开发过程中,通过外部浏览器调起APP页面的场景也很普遍使用.下面就介绍一下通过外部H5页面唤起APP中页面的通用方法. 1.首先需要在AndroidMainifest.xml中对你要启动的那个 ...
- 【网络是怎么连接的】一、浏览器与HTTP协议
浏览器: 1.生成HTTP消息: 1).网址结构: http://user:password@www.glasscom.com:80/dir/file1.htm 2).HTTP服务基本思路: a).请 ...
- 浏览器通过http协议通过nginx访问ftp服务器上的文件
1.修改nginx配置文件 2.修改nginx默认目录为ftp默认目录 3.修改成自定义路径后,并修改此目录第一行,修改为root或是nginx用户 4.重新加载 cd /usr/local/ngin ...
- web基础-web工作原理,http协议,浏览器缓存
1,web工作原理 2,http协议 3,浏览器缓存 4,cookie和session -------------------------------------------------------- ...
- 深入理解HTTP协议(转) 浏览器和服务器如何通信(HTTP协议)
http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...
- (二)Fiddler抓取Firefox、Chrome浏览器上的https协议
Fiddler抓取Firefox.Chrome浏览器上的https协议 安装Fiddler后默认只抓取http协议,如果是https协议的话,浏览器就会提示"您的链接并不安全". ...
- C#注册URL协议,使用浏览器打开本地程序,类似网页上点了QQ交谈打开本地QQ客户端程序
本教程适用于Windows系统 从浏览器上打开本地程序,主要用到了本地URL协议,其实主要就是改注册表 先建立一个项目,我建的是控制台项目 在Program.cs写2个静态方法用来添加注册表.移除注册 ...
- 浏览器-http协议简介
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
随机推荐
- Bootstrap学习 - 组件
下拉菜单 注意:需要先引入jQuery.js再引入bootstrap.js(依赖前者) <div class="dropdown pull-right"> //默认就是 ...
- RedHat Enterprise Linux AS4&5 安装gcc过程
三.Gcc安装方法(redhat 4): 一.安装步骤 1.使用which gcc命令查看gcc是否安装安装 2.如若没有安装则下载如下安装包,所需安装包如下 一共需要拷贝以下五个安装包: binut ...
- 在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女,sql语句该怎么写
在数据库里面有这么一个表:用m代表男,用f代表女,现在我要输出格式为中文的:男和女, sql语句该怎么写 select case sex when 'm' then '男' else '女' a ...
- 遍历Map key-value的两种方法
以前遍历Map key-value比较习惯的方式是先获取Map中的所有key值,然后根据key,依次从Map中去数据,基本方式如下: Map<String,String> testData ...
- Recover Polygon (easy)
Recover Polygon (easy) The zombies are gathering in their secret lair! Heidi will strike hard to des ...
- 开心的金明<0-1背包>
题意:0-1背包经典题: 不多述,直接上代码: 1.二维数组表示法: #include<cstdio> #include<iostream> #include<algor ...
- 打造最强Windows Server 2012 给你比Windows 8更好的体验
每一代微软桌面操作系统推出的时候,都会同步推出相应核心的服务器操作系统,稳定性会更强哈 所以改造一下,让它保留兼容和专业的同时又有桌面操作系统的美观和便捷,多好 咳咳,让我们来看看怎么把Server ...
- PAT (Advanced Level) 1030. Travel Plan (30)
先处理出最短路上的边.变成一个DAG,然后在DAG上进行DFS. #include<iostream> #include<cstring> #include<cmath& ...
- BNU OJ 51003 BQG's Confusing Sequence
二进制++高精度取模 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...
- USACO Section 1.1 Greedy Gift Givers 解题报告
题目 问题描述 有若干个朋友,朋友之间可以选择互相赠送一些有价值的礼物.一个人可以选择将一部分钱分给若干个朋友,例如某人送给其他两个人钱,总共赠送3元,两个人平均分,原本应该是每人1.5元,但是只能取 ...