HTTP及Cookie


title: HTTP概述理解及cookie封装
tags:
- javaScript
- HTTP协议及cookie
categories:
- web前端
- javaScript


HTTP协议介绍

HTTP学习--MDN

  • HTTP: 超文本传输协议(HyperText Transfer Protocol)它是客户端和web服务器数据传输的基础,现在基本上所有的web项目都遵从HTTP协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求服务器资源
  • HTTPS:超文本传输安全协议(Hypertext Transfer Protocol Secure

HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。Web服务器根据接收到的请求后,向客户端发送响应信息。

当我们打开浏览器,在地址栏中输入URL地址如:
http://baidu.com,然后我们就看到了网页。 原理是怎样的呢?实际上我们输入URL后,浏览器会向Web服务器发送了一个Request, Web服务器接到Request后进行处理,然后服务器Response回来给浏览器,浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示:

Image.png

URL

URL: URL(Uniform Resource Locator) 统一资源定位符。作用:就是用于找到一个网络上的资源
如:

  • http://xxx.com/src/1.html找到了服务器1.html资源文件
  • http://xxx.com/images/1.png找到了服务器1.png资源文件
    URI:统一资源标识符(Uniform Resource Identifier)

注意:url只是标识资源,但不知道在哪找。开发中一般只说URL.

URL基本构成

URL(Uniform Resource Locator) 地址用于定位一个网络上的资源, 基本格式如下

schema://host[:port]/path/[?query-string][#anchor]      

Schema: http
host: www.baidu.com
path: /a/b/index.php
Query String: name=dachui&age=33
Anchor: header

HTTP最大特点:无状态。

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态。

HTTP消息的结构

一个完整的http请求应该包含请求(Request)响应(Response)部分。

请求(Request)

先看Request消息的结构, Request 消息分为4部分,

  • 第一部分:Request line(请求行)
  • 第二部分:Request header(请求头部)
  • 第三部分:空行
  • 第四部分:Request body(请求数据)结构如下图:


    Image1.png

第一行中的Method:表示请求方法,比如"POST","GET", Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号。

第二行:http请求头部

第三行:空行

第四行:请求数据(针对于post请求)

1、如下get请求结构:

get /a/b/index.php HTTP/1.1
Host: www.xxx.com
User-Agent: Mozilla/5.0

2、post请求结构

post /a/b/index.php HTTP/1.1
Host: www.xxx.com
User-Agent: Mozilla/5.0 

name=dachui&age=18

响应(Response)

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。


Image.jpg

其中状态行由协议/版本号 状态码 状态文本三部分构成

状态码

状态码代表着http请求是否成功,还是失败等信息。

状态码由三位数组构成:

  • 1xx: 信息,服务器收到请求,继续处理

  • 2xx: 成功。 作被成功接收并处理

  • 3xx: 重定向,需要进一步操作才能完成请求

  • 4xx: 客户端错误,请求包含语法错误或无法完成请求

  • 5xx: 服务端内部错误。

下面是常见的HTTP状态码(HTTP Status Code):

  • 200:请求成功301:网页(元等)被永久转移到其它URL

  • 304:未被修改,说明此资源被浏览器缓存了

  • 404:找不到此网页(资源)

  • 500:内部服务器错误其

  • 他状态码解释

get和post区别

  • get参数通过url传递,post放在请求体(request body)中

  • get请求在url传递的参数有长度限制,而post没有

  • get比post更不安全,因为参数直接显示在url地址中,所以不能传递敏感数据

  • get请求浏览器会主动缓存,而post不会

  • get请求参数会保存在浏览历史记录,而post请求不会
    相同点:

  • get和post本质上都是tcp连接。

COOKIE

cookie基本概念

Cookie是一种会话跟踪技术,其是保存在浏览器本地中的一小块数据,每个Cookie的大小一般在4KB左右,因浏览器而异。

  • 会话:用户进入网站,开始浏览信息到关闭浏览器的过程,就称之为是一次会话。
  • 会话跟踪技术:浏览器(客户端)和服务器之间在进行多次请求间共享数据的过程,就称为会话跟踪技术。

Cookie 主要用来分辨两个请求是否来自同一个浏览器,它会在浏览器下次向同一服务器再次发起请求时被携带并发送到服务器上,从而辨别是否是来自同一浏览器。 因为*http是无状态*的。

主要应用场景:

  • 会话状态管理(如用户登录状态、购物车等)
    个性化设置(保存用户设置的背景色等)
    浏览器行为跟踪(如跟踪分析用户行为等)
    查看当前域名下面的所有cookie
document.cookie

查看浏览器是否打开 Cookie 功能

 window.navigator.cookieEnabled //true

cookie操作

可以通过js或服务端语言(如PHP、java)来操作。

js操作cookie设置

  • 设置cookie:
 document.cookie="username=tom"document.cookie="id=100"
  • 存数组或对象需要进行转换
JSON.stringify() : 将对象转化为字符串类型
JSON.parse() : 将字符串转化为对象类型
  • 设置cookie有效期
var d = new Date();
d.setDate( d.getDate() + 2 ); //有效期两天
document.cookie="username=tom;expires="+d
  • 获取cookie
document.cookie
  • 删除cookie
document.cookie="username=''"//设置为空

或者

document.cookie="username='';expire=-1"//设置时间为负数

封装cookie

  • 设置cookie
function setCookie(k,v,d){
    if(d){
         var d = new Date();
         d.setDate( d.getDate() + d );
         document.cookie=k+'='+v + ";expires="+d;
    }else{
         document.cookie=k+'='+v;
    }
}
  • 获取cookie
function getCookie(k){
   if(document.cookie){
       var cookie = document.cookie;
       var arr = cookie.split('; ');
       for(var i = 0; i < arr.length; i++){
           var items = arr[i].split('=');
           if(items[0]==k){
           return items[1]
           }
       }
   }
   return "";
}
  • 删除cookie
function removeCookie(k){
   setCookie(k," ",-1);
}

cookie实现注册登录核心点:

1、注册页面存储cookie成功跳转到登录页面
2、登录页面点击登录按钮去cookie中进行用户名和密码匹配

php操作cookie(了解)

通过setcookie函数进行操作:

setcookie ( string $name [, string $value = ";"; [, int $expires = 0 [, string $path = ""[, string $domain = "" [, bool$secure = FALSE [, bool $httponly = FALSE ]]]]]] )

php设置cookie

cookie注意问题

  • 当设置cookie后,向服务器发起的每一次新请求,浏览器都会将之前保存的Cookie信息通过Cookie请求头部再发送给服务器,其目的为了识别是同一个客户端。

  • Path。 cookie访问路径。 如果cookie设置的所在路径为"/"、则cookie在整个域中都可用。 如果cookie设置的所在路径为/foo/则cookie仅在/foo目录及其所有子目录可用,如/foo/bar/目录可访问。 不设置路径默认是当前目录。即cookie是不能跨目录访问

  • httpOnly。设置为则只能通过HTTP协议访问cookie,意味着无法通过JS来访问cookie,这可有效减少XSS的攻击。
    XSS攻击--百度搜索

  • Cookie中最好不要放敏感数据,因为用户可以篡改。

点击下方可进入我的个人博客

我的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354