在探http请求
参考:https://itbilu.com/other/relate/Ny2IWC3N-.html
Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之间的会话状态。不同的cookie依赖HTTP请求头与响应头实现存储在客户端,而Session存储在服务器端,Session可以通过Cookie实现,也可以使用URL回写的方式实现。
HTTP的无状态
HTTP协议是无状态的,客户端(浏览器)与服务器之间基于请求-响应 实现数据交互,响应结束后两者之间的连接就会断开。由于每次会话都是一新连接,所以服务器无法从连接上获取会话状态。这样就会带来一些问题,如:页面发生跳转服务器无法得知用户上一页面输入,也无法得知用户是否登录等。
解决方法:一个HTTP请求是由3部分构成的:状态行、请求头、请求体。其中状态行和请求头在所有的HTTP请求方法中存在,
请求体只有POST,PUT等部分请求中存在

服务器收到客户端的请求之后,会对用户进行响应,一个HTTP响应也同样由3部分构成:状态行、响应头、响应体。
响应体只存在部分HTTP请求方法响应中。

如上所示,HTTP请求/响应中,除正文外,还有一个请求/响应头。而这个 请求响应头都是可以设置的。根据这个特性我们可以在请求头加一个记录用户状态信息请求头,就可以实现用户状态的传递。
这也是cookie的实现方式。cookie是存储在客户端的一个特殊的字符串,在发送HTTP请求时,这个字符串会添加到一个名为Cookie的请求头中一同发送给服务器。Session实现类似,不同的是状态信息存储在服务器中,而只是客户端的Cookie中存储了表示该会话标示的SessionId
HTTP消息头(常见的http请求头与响应头)
HTTP消息头是指,在超文本传输协议(Hypertext Transfer Protocol)的请求和响应消息中,协议头部分的那些组件。HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义HTTP事务中具体操作参数
关于HTTP请求头

Accept :可接受的响应内容类型(Content-Types)
Accept-Encoding:可接受的响应内容的编码方式
Cookie:由之前服务器通过Set-Cookie设置的一个HTTP协议Cookie
Host:服务器的域名以及服务器所监听的端口
Origin:发起一个针对跨域资源共享的请求来源
Connection:客户端(浏览器)想要优先使用的连接类型
Proxy-Connection:用来对 HTTP 连接进行说明
Referer:表示浏览器所访问的前一个页面,
User-Agent:浏览器身份标示字符串
响应头

Access-Control-Allow-Origin:指定哪些网站可以跨域资源共享
Cookie
HTTP协议是一种无状态协议、客户端与服务器建立并传输数据,数据传输完成后,连接就会关闭,由此服务器无法知道上次干什么了
Cookie是解决HTTP无状态的有效手段,服务器可以设置或读取Cookie中所包含的信息。当用户登录后,服务器会发送登录凭据的Cookie到用户浏览器客户端,而浏览器对该Cookie进行某种形式的存储。用户再次访问该网站,浏览器就会发送该Cookie到服务器,服务器对该用户进行验证,合法时,用户不必输入用户名密码可直接登录
本质上讲,Cookie是一段文本信息。客户端请求服务器,如果服务器需要记录用户状态,就在响应用户请求时,发送一段cookie信息,客户端浏览器保存改Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交改服务器。服务器检查Cookie内容,以此来判断用户状态,服务器还会对Cookie信息进行维护,必要时对Cookie内容进行修改。
Cookie类型:按存储分为内存式Cookie和硬盘式Cookie,内存式Cookie存储在内存中,浏览器关闭就会消失,硬盘式Cookie只有等Cookie过期才会清除
Cookie通过Cookie请求头和setCookie响应头实现
Set-Cookie-服务器响应头,用于告诉客户端要设置cookie
Cookie-请求头,根据Set-Cookie设置并保存到客户端的Cookie值,会再次发送HTTP请求时通过这个请求头一同发送到服务器。

用户请求客户端后,如果需要记录状态服务器会在请求响应中包含一个Set-Cookie响应头,会将Cookie保存到客户端
对于一个需要保存状态的HTTP响应来说

客户端收到响应头之后,会将Cookie UserID=name 进行存储,并设置超过时间3600秒而Version是Cookie的版本
再次请求服务器时,客户端会在请求头中包含一个Cookie请求头,其值就是从服务器返回来的状态信息

Session
Cookie很好的解决了HTTP通讯中状态问题,但其本身也存在一些问题,如:
客户端存储,可能会被修改或删除
发送请求时,Cookie会被一起发送给服务器,当Cookie数据量较大时会带来额外的请求数据
客户端对Cookie大小有一定限制
Session解决了Cookie的一些缺点,Session同样为了记录用户状态,对每个用户来说,相应的一个状态保存在服务器中,而只是在客户端记录一个sessionID用于区分哪个用户的Session
与cookie相比Session有一定优势
Session值存储在服务器,相对来说安全
客户端发送给服务器只有一个sessionID,数据量小
Session同样需要客户端存储一个sessionID,可以这个值存储在Cookie,每次发送请求时,通过Cookie请求将其发送到服务器,也可以不使用cookie,而将sessionID做为一个额外的请求参数,通过URL或请求体发送到服务器
在探http请求的更多相关文章
- 巧妙设备MTU的大小,轻松提网速
		MTU是什么? "MTU=最大传输单元 单位:字节" 我们在使用互联网时进行的各种网络操作,都是通过一个又一个"数据包"传输来实现的.而MTU指定了网络中可数据 ... 
- 爬虫再探实战(四)———爬取动态加载页面——请求json
		还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ... 
- Android之EACCES (Permission denied)与Permission denied异常探密
		话说,Accipiter君,最近又开始怒学Android了,记得刚开始还是09年学的,现在的手机还是华为出的最早的一款Android手机C8500,那时候就想好好学习Android,赚点小钱,可是~~ ... 
- 再探jQuery
		再探jQuery 前言:在使用jQuery的时候发现一些知识点记得并不牢固,因此希望通过总结知识点加深对jQuery的应用,也希望和各位博友共同分享. jQuery是一个JavaScript库,它极大 ... 
- DIOCP 运作核心探密
		来自网友天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出了不少.我最近也在学习DIOCP,打算将它用于自己的服务端,今天让我们来一起探密它(DIOCP)的运作核心 ... 
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
		本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ... 
- [老老实实学WCF] 第五篇 再探通信--ClientBase
		老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ... 
- 再探ASP.NET 5(转载)
		就在最近一段时间,微软又有大动作了,在IDE方面除了给我们发布了Viausl Studio 2013 社区版还发布了全新的Visual Studio 2015 Preview. Visual Stud ... 
- ASP.NET/MVC/Core的HTTP请求流程
		ASP.NET HTTP管道(Pipeline)模型 1. 先讲一点,再深刻思考 一般我们都在写业务代码,优化页面,优化逻辑之间内徘徊.也许我们懂得HTTP,HTTPS的GET,POST,但是我们大部 ... 
随机推荐
- 基于Linux的Samba开源共享解决方案测试(二)
			单NAS网关50Mb码率视音频文件的稳定读测试结果如下: 50Mb/s负载性能记录 NAS网关资源占用 稳定读 稳定读 CPU空闲 内存空闲 网卡占用 13个稳定流 96.70% 10G 104MB/ ... 
- python学习之----BeautifulSoup示例一
			BeautifulSoup 库最常用的对象恰好就是BeautifulSoup 对象. from urllib.request import urlopen from bs4 import Beauti ... 
- zabbix_get无法执行agent端的脚本文件解决办法
			一,无法执行脚本参考网站:http://blog.51cto.com/13589448/2070180 权限不足时提示: server端提示: [root@yao local]# zabbix_get ... 
- sql server自增列值的获取
			IDENT_CURRENT(tbname) 是看表对象.所以没有受作用域限制. SCOPE_IDENTITY() 受作用域限制.同一个会话里面不同作用域也会有差异 @@IDENTITY 受会话限制 ... 
- MySQL Windows 安装与配置
			<01> 下载解压 MySQL 至 D盘, 将文件夹改名为 MySQL <02> 控制台状态下进入 MySQL/bin 目录 输入 mysqld -install 回车 安装 ... 
- css之单边阴影
			css之单边阴影 需求:在网上找的其他博客上说单边阴影需要牺牲掉模糊,实际上牺牲掉模糊直接用border不就好了 效果: 原理: 1.在左边的外阴影就是右边的内阴影 2.将box-shadow写在be ... 
- 制作keil5的pack
			[原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/6273415.html 我在这里就交大家怎样制作自己的Pack,(这里是我制作好的http ... 
- 5.log4j报错
			java.lang.UnsupportedClassVersionError: org/apache/log4j/Logger : Unsupported major.minor version 51 ... 
- vi和vim的三种模式
			1.一般模式 用vi 或vim 命令 ——>一般模式 2. 插入模式 i,o,a,r 及其各自大写 ——>插入模式 一般用 i 3.命令行模式 用命令来完成 读取,存盘,替换,离开vim ... 
- net send 换行和发送广播
			net send ip message 要换行的时候按ctrl+t.最后按enter 或 ctrl + m 发出 如果是批处理里面要用: 在命令行下使用:echo ^T > a.txt,注意这里 ... 
