• http请求报头header


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

                                                               http 请求报头header

    一.认识请求报头(header)

    1.Host

    2.content-length

    3.content-type

    常见的三种格式

    小结

     二.User-Agent(简称UA)

    三.Referer

    四.Cookie 

    cookie从哪来

    cookie到哪去

    cookie典型的应用场景



    前言

    提示:这里可以添加本文要记录的大概内容:

    上篇文章我们借助抓包工具了解到http协议报文格式:从请求和响应方面入手

    了解到了url的基本组成,还有一些方法

    今天我们来探讨Http协议的细节


    提示:以下是本篇文章正文内容,下面案例可供参考

      http 请求报头header

    一.认识请求报头(header)

    上文讲到http协议的请求报文分为四部分,今天讲讲请求报头,这里的键值对都是标准规定的,有特定含义的

    这里介绍几个常见的报头种类:

    1.Host

    表示服务器上的地址和端口(去哪里找到服务器)

    例如,Host:www.sogou.com

    可见这放的就是ip+端口,省略就是默认值,端口可以省略http默认值是80,https默认值是443

      那么既然url里面也有服务器的ip和端口,为什么还要搞个host?

    url里的www.sogou.com

    事实上,url里面的ip,和端口,和host不完全一样,当请求是通过代理来访问的时候,是可能不一样的(fiddler中无法体现)

    2.content-length

    表示body中的数据长度

    http协议在传输层是基于tcp(http 3.0之前这样的),既然是tcp就要注意粘包问题,之前讲过,

    • 可以使用一个约定的字符串, 比如空行,
    • 也可以约定报文的长度解决

    在这里我们有content-length来表示数据长度,例如

    我们可能会将俩次get请求读到一起,第二个get和前一个body混为一谈

    3.content-type

    表示请求中的body数据格式,由于body中的数据格式不同,对接受方来说解析方法截然不同

    常见的三种格式

    1.form表单构造的请求,就是这个Content - Type,其实就是 html 的 form标签

    2. multipart/form-data: form 表单提交的数据格式

    这种格式主要是在上传文件的时候会出现

     3.application/json :数据为Json格式,body格式形如:

    小结

    注意这俩字段,不一定有,但是如果有一个,就会有另一个

    比如请求没有body(get)就没有这俩字段

    请求有body(post)一定有这俩字段

     二.User-Agent(简称UA)

    表示浏览器/操作系统的属性. 形如

     分别描述了火狐浏览器,操作系统版本,win nt是系统内核名字,一个浏览器的内核(applewebkit),还有最熟悉的谷歌浏览器,mac电脑上的默认浏览器safari

    小结:ua主要包含的信息,就是操作系统信息和浏览器的信息,描述了用户在使用啥样的设备上网

    在之前系统不同,浏览器不同,对页面的支持程度也不同

     后来随着浏览器的发展,发明了技术,响应式页面,通过特殊的css和js,感知当前浏览器的窗口的尺寸,根据不同的尺寸,重新排列页面布局。

    现在很多网站都是这样,写一份页面,就能兼容多个设备了

    现在及时ua失去了最初的作用,也可以用来在服务器统计用户的设备情况

    三.Referer

    可能没有

    Refere指的是当前这个页面,从哪个页面跳转过来的(上级页面是啥),在浏览器地址栏里直接输入一个地址就没referer,直接点收藏夹也没有

    cpc广告,按照点击计费,如果运营商篡改了referer,如图:

    如果运营商利用reference跳转到他的页面上,又因为cpc计费,导致资金损失,这里就需要对协议加密,典型的是https协议

    四.Cookie 

    也是请求报头中的一个重要字段,是浏览器在本地存储数据(存到硬盘上)的一种机制   

     浏览器为了安全期间,禁止网页js访问你电脑的硬盘(文件系统)

    因此,浏览器专门提供了特殊的api给网页使用,可以让网页存储一些简单的数据

     如何组织:

    点击浏览器的钥匙锁,点击cookie,发现这些都是域名来组织的

    注意 cookie这里的键值对都是简单的字符串,使用cookie作为保存数据的手段,只能存一些简单的键值对信息和简单的字符串,但是想保存个图片啥的,存falsh,是做不到的。

    比如cookie可以存:

    1.上次访问页面的时间

    2.当前网页的访问次数

    3.当前访问页面的身份标识(身份标识,id)

    注意,这里存什么,都是程序员自定义的(代码控制)

    cookie从哪来

    cookie 是存在浏览器的,来源是服务器

    例如访问一个网站2345

    像这里的cookie都是咱们浏览器访问了2345.com服务器之后由服务器返回的,在服务器返回的响应报文中,可以在响应header中包含一个/多个 set-cookie这样的资源,浏览器看到set-cookie就会把这样的数据给保存在浏览器本地

    注意这些set-cookie由于是在head里面键值对方式存储,都是在服务器代码中构造出来的

    cookie到哪去

    来自于服务器,存储于浏览器,还要再回到服务器。

    当浏览器保存了cookie之后,下次浏览器访问同一个网站,就会把之前本地存储的cookie再通过http请求header中的cookie给带过去

    既然来源服务器,回到服务器,经历这一圈是因为服务器要服务的客户端是很多的,这些不同的客户端应该要有不同的数据

    cookie典型的应用场景

    最常用的场景是在客户端维持登录状态

    在某个网站上登录成功后,浏览器就会机制当前登录用户的身份信息,然后再接下来访问网站的其他页面,服务器也能直到咱们是谁在登录(总不能每次打开一个页面都重新登录一遍

    注意这里的首次登录,和第二次登录的过程,浏览器这边存的是身份标识,服务器这边存储具体信息(键值对),根据身份标识绑定,最终服务器返回给浏览器一个页面 

    生活中的cookie 医院看病

    注意理解用户拿到就诊卡就是一个身份标识,里面记录了set-cookie这样的键值对,医院(服务器)刷卡拿到的值,就是你的具体信息了,每次去不同诊室的刷卡过程,就省去了一边右一边的登录登记,使个人一直在维持登录状态

     

     

  • 相关阅读:
    XSS攻击(1), 测试XSS漏洞, 获取cookie
    Google Earth Engine(GEE)——防止影像属性丢失的好方法(copyProperties)
    如何让ESP8266板子像APP开发一样方便
    MySQL 教程 1.2
    Nodejs进程间通信
    MySQL是怎样运行的:从根儿上理解MySQL | 查询优化器(一):单表查询方法、基于成本的优化
    OpenResty学习笔记03:再探WAF
    Apache arrow顶级项目调试
    加列法计算lower unit matrix inversion
    自托管图像共享服务Slink
  • 原文地址:https://blog.csdn.net/panpanaa/article/details/127928761