深入解析HTTP(web开发详细理解原理)【JavaWeb】

一.HTTP基本知识

超文本传输协议HTTP:是一种简单的请求-响应协议,通常在TCP上运行。它指定客户端可以向服务器发送哪些消息以及将得到什么响应。

HTTP:

  • 文本:html,字符串...Request URL: https://www.bilibili.com/ Request Method: GET Status Code: 200 Remote Address: 120.192.82.75:443 Referrer Policy: strict-origin-when-cross-origin上述常规标头解释: Request URL:请求 URL。 b站的域名 Request Method: 请求方式。 get方法 Status Code:状态码。 200 Remote Address:远程地址。 对应b站的远程地址。 Referrer Policy: 引用站点策略。 引用的协议。
  • 超文本:音乐,图片,视频等等。
  • 端口号80。 Https:比http安全,端口:443。二.http1.0和http2.0对比http1.0:规定浏览器和服务器仅保持短期连接。 浏览器的每个请求都需要与服务器建立TCP连接。服务器完成请求处理后,会立即断开TCP连接。服务器不会跟踪每个客户,也不会记录过去的请求。 HTTP 1.1:支持持久连接,默认情况下使用持久连接。 可以在同一TCP连接中传输多个HTTP请求和响应。多个请求和响应可以重叠,并且可以同时执行多个请求与响应。更多的请求头和响应头(例如,HTTP 1.0没有主机字段)。三.HTTP请求以B站为例: 打开F12,找到bilibili,查看Headers:详细解析如下:
    在这里插入图片描述
    规标头如下:

3.2 响应头

b站的响应头如下:

cache-control: no-cache
content-encoding: gzip
content-type: text/html; charset=utf-8
set-cookie: innersign=0; path=/; domain=.bilibili.com

上述响应头解释:

cache-control:缓存控制。 no-cache禁止使用缓存

content-encoding:编码格式。 gzip格式

content-type: 链接方式。 text/html; charset=utf-8

3.3请求标头

请求标头如下:

:authority: www.bilibili.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9
cache-control: max-age=0

和响应头对应,基本参数作用相同,差别不大。

3.4请求行

请求行中的请求方法:get

请求方法:get、post、head、delete、put、trace......

Get:请求可以在有限的大小下携带更少的参数。数据内容将显示在浏览器的URL地址栏中,这是不安全但高效的

Post:请求可以携带的参数是无限的,并且大小是无限的。数据内容不会显示在浏览器的URL地址栏中,这是安全的,但效率低下。

3.5 消息头

主要的参数:

Accept
Accept-Encoding
Accept-Language
Cache-Control
Connection

上述消息头主要的参数解释如下:

Accept:支持的数据类型。

Accept-Encoding:支持的编码格式。

Accept-Language:语言环境。

Cache-Control:缓存控制,和上面一样。

Connection:保活状态

四.HTTP 响应

响应是存在于服务器和客服端之间的。

4.1 响应体

Accept:支持的数据类型。
Accept-Encoding:支持的编码格式。
Accept-Language:语言环境。
Cache-Control:缓存控制,和上面一样。
Connection:保活状态。
HOST:主机。
Refresh:刷新。
Location:重定位。

4.2 响应状态码(重点)

200 - 请求成功

301 - 资源(网页等)被永久转移到其它URL

3**:3开头的是重定向。

404 - 请求的资源(网页等)不存在

500 - 内部服务器错误

502 - 网关错误

五. 思考题

留下一个经典的思考题题目:

在浏览器的地址栏中输入地址并按enter键时,页面会显示出来。怎么搞的?

本文转载于网络 如有侵权请联系删除

相关文章

  • 安卓在子线程传值给主线程,通过Handler传值

    昨晚上在进行http请求获取数据并修改listview的时候遇到了一个问题Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews大概意思就是:只有创建了视图层级的原始线程才可以修改这个视图于是我百度了一下,然后大概解决方案是这样子的,子线程通过handler传值给主线程,主线程接收后,再进行修改listview。Handlerhandler=newHandler(){ @Override publicvoidhandleMessage(Messagemsg){ super.handleMessage(msg); if(msg.what==1){ Bundledata=msg.getData(); Stringval=data.getString("value"); //设置UI tvCode.setText(val); Log.i(TAG,"请求结果:"+val); }elseif(msg.what==0){ Toast.makeText(getApplicationConte

  • Install Jumpserver48

    安装WebTerminal前端[root@h165~]#cd/opt [root@h165opt]#wgethttps://github.com/jumpserver/luna/releases/download/1.3.3/luna.tar.gz --2018-07-2218:16:49--https://github.com/jumpserver/luna/releases/download/1.3.3/luna.tar.gz 正在解析主机github.com(github.com)...52.74.223.119,13.229.188.59,13.250.177.223 正在连接github.com(github.com)|52.74.223.119|:443...已连接。 已发出HTTP请求,正在等待回应...302Found 位置:https://github-production-release-asset-2e65be.s3.amazonaws.com/83748317/c44beea0-8b4f-11e8-8056-75da7b314d1f?X-Amz-Algorith

  • Umi的headScripts属性,在html页面头部添加js

    headScripts配置<head>里的额外脚本,默认值为数组,数组项为字符串或对象。Type:ArrayDefault:[]大部分场景下用字符串格式就够了,比如:export default {   headScripts: [`alert(1);`, `https://a.com/b.js`], };复制会生成HTML,<head>   <script>     alert(1);   </script>   <script src="https://a.com/b.js"></script> </head>复制如果要使用额外属性,可以用对象的格式,export default {   headScripts: [     { src: '/foo.js', defer: true },     { content: `alert('你好');`, charset: 'utf-8' },   ], };复制会生成HTM

  • TypeScript 定义函数的几种写法

    参考链接1 参考链接2 写法1-使用function关键字functiongreeter(fn:(a:string)=>void){ fn("Hello,World"); } functionprintToConsole(s:string){ console.log(s); } greeter(printToConsole);复制(a:string)=>void 上述语法的含义:表示一个函数,接收一个字符串作为输入参数,没有返回参数。可以使用type关键字定义一个别名:typeGreetFunction=(a:string)=>void;复制Callsignatures使用callsignatures给函数增加额外的属性。TypeScript的function也是value,和其他value一样。注意:一定有type关键字。源代码:typeDescribableFunction={ description:string; (someArg:number):boolean; }; functiondoSomething(fn:Describab

  • 特殊地区无法使用 git 的问题

    国内大部分地方github都可以直接上,但有些地区是无法直接访问的,需要使用梯子。成功访问github仅仅只是第一步,如果要使用gitclone、gitpush等命令对于这些特殊地区又将是一番折磨简单来说,如果使用git命令与github进行交互报错,例如LibreSSLSSL_connect:SSL_ERROR_SYSCALLinconnectiontogithub.com:443复制解决方法如下(环境macos):nano~/.gitconfig添加以下内容[https"https://github.com"] proxy=https://127.0.0.1:10086 [http"https://github.com"] proxy=socks5://127.0.0.1:10086复制其中端口号以服务器设置为主,见下图

  • 通过COLA看应用架构

    什么是架构?架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。先来看一下软件架构的分类。随着互联网的发展,现在的系统要支撑数亿人同时在线购物、通信、娱乐的需要,相应的软件体系结构也变得越来越复杂。软件架构的含义也变得更加宽泛,我们不能简单地用一个软件架构来指代所有的软件架构工作。张建飞将软件架构划分为:业务架构、应用架构、分布式系统架构、数据架构、物理架构和运维架构。典型的应用架构又包括分层架构;CQRS(CommandQuerySeparation),即命令查询分离;六边形架构,即端口-适配器架构;洋葱圈架构等等。在COLA的设计中,他们汲取了经典架构的优秀思想,此外还补充了规范设计和扩展设计,并且使用Archetype的方式,将架构固化下来,以便可以快速的在开发中使用。COLA的分层是一种改良了的三层架构,主要是将传统的业务逻辑层拆分成应用层、领域层和基础实施层。在扩展设计中,COLA有两个重要的概念:一个是业务身份,是指业务在系统唯一标识一个业务或者一个场景的标志。另一个是扩展点,即每个业务或者场景都可以实现一个或多个扩展点(ExtensionPoint)。将业务身份和扩

  • Codis与RedisCluster的原理详解

    背景介绍我们先来看一下为什么要做集群,如果我们要部署一个单节点Redis,很明显会遇到单点故障的问题。首先能想到解决单点故障的方法,就是做主从,但是当有海量存储需求时,单一的主从结构就会出问题,说问题之前要先了解一下主从之间是如何复制的。我们把Redis分为三个部分,分别是客户端、主节点以及从节点,如果从节点要同步主节点的数据,它首先会发Sync指令给主节点,主节点收到指令之后会执行BGSAVE命令生成RDB文件,这个RDB文件指的是快照文件,它是Redis两种备份方式的其中一种,另一种叫AOF,它的原理是将所有的写入指令存入文件,mysql的binlog原理是一样的。如果主节点在生成RDB的过程当中,客户端发来了写入指令,这个时候主节点会把指令全部写入缓冲区,等RDB生成完了,会把RDB文件发送给从节点,最后再把缓冲区的指令发送给从节点。这样就完成了整个的复制。我们刚才说单纯地做主从是有缺陷的,这个缺陷就是如果我们要存储海量的数据,那么BGSAVE指令生成的RDB文件会非常巨大,这个文件传送给从节点也会非常慢,如果缓冲区命令很多的话,从节点同步数据时也会执行很久,所以,要解决单点问题

  • 2018十大机器人新进展:索尼电子狗、哈佛微型机器人、耶鲁机器皮肤榜上有名

    机器人技术和机器人开发在2018年取得了一些标志性的进展,无论是家用、工业、医疗、生物和玩具行业都取得了显着的进步,推出了新机器人和先进的人工智能。比如之前日本出名的机器漫游车捕捉小行星Ryugu的近照、索尼新一代电子狗、哈佛研发可在水上水下行走的微型机器人还有耶鲁大学研发的机器人皮肤。然而,今年这个领域也发生了可惜的事情,RethinkRobotics由于销售不佳,在2018年10月25日被HAHN集团收购,而开发社交机器人的Jibo也倒闭,推出家庭助理库里MayfieldRobotics也命运相似,今年以来一直在寻找外部合作伙伴进行长期技术开发,但未能找到投资来支持,最终该公司在10月31日前停止所有业务。跟任何技术一样,当新技术进入市场时,旧技术会被淘汰或者被更新,2018年在机器人领域已经看到了一些新的进步,用各种方式改变我们的生活。从家庭助手到帮助拯救环境,机器人也将会继续发展,承担我们分配的任何任务。而本文将会介绍新推出的机器人和机器人开发项目,以及预测未来的行业趋势。1:波士顿动力公司推出Atlas人形机器人波士顿动力公司的Atlas人形机器人(基于PETMAN)在201

  • ITIL 2011 -- 服务运营的5个流程简介 (上)

    要做一个IT运维管理的项目,客户提到了ITIL(ITInfrastructureLibrary),所以谈需求之前我研究了一下ITIL,发现东西比较多,但是里面的服务运维部分是项目一期所需要的,那我就把我这部分的学习笔记贴一下。ITSM,ITIL有个术语叫做ITSM(ITServiceManagement)IT服务管理,简单的来说它就是指对企业IT系统的规划、研发、实施和运营的管理,我认为它就是一个概念。而ITIL(ITInfrastructureLibrary)IT基础架构库,它就是适用于ITSM的一个框架,一套最佳实践。ITIL®是英国AXELOS有限公司的注册商标。我今天介绍的内容是基于ITIL2011版本的。ITIL分为5个阶段或叫生命周期:战略阶段(ServiceStrategy);设计阶段(ServiceDesign);转换阶段(ServiceTransition);运营阶段(ServiceOperation);改进阶段(ServiceImprovement);看下图:我要介绍的就是左下角服务运营(ServiceOperation)阶段的5个管理流程。而服务运营阶段的职能(F

  • 还想在大数据面前隐身?这21个方面你该注意了

    编者注:本文作者为BernardMarr,是美国著名的畅销科技作家和数据专家。擅长大数据的测量和分析。(来源:猎云网,编译:田小雪)你认为大数据对你的了解有多少?答案是相当多。每次我们用电脑、用手机或是用平板电脑打开一款App时,都会以数字的形式留下浏览的痕迹和路线。绝大多数人都知道,遇到问题就找谷歌,想要与朋友互动就找facebook。但其实我们了解的只是这些网络的基本用途,我们所掌握的也只不过是一个模糊的概念。事实上,互联网所具备的更深层次的内容我们根本是看不到的。 如今的大数据几乎可以将我们每一个人都看透,大概表现在21个方面。下面开始举例:1首先,对于你不懂的问题和搜索的内容,Google、Bing和Yahoo!这类搜索引擎肯定是能够给出答案的。其次,对于你浏览过的所有网站,哪怕是所谓的无痕浏览,ISP(InternetServiceProvider,即互联网服务提供商)都会详尽地记录下来。2Google知道你的年龄和性别,千万别以为你没有主动透露,他们就无从知晓。作为各种广告的发送对象,他们会给你建立一份综合全面的档案,其中包括你的各种兴趣爱好(这方面你是可以自己进行编辑的)

  • 国外的图书出版商如何使用社交化媒体

    社交网络最近几年风靡全球,那么在老牌的出版业,是如何应对这股新型的社会化浪潮的呢?我们来看看国外同行的做法。这里以北美六大图书出版做为例子,六大包括:HachetteBookGroup、HarperCollins、Macmillan、PenguinGroup、RandomHouse、Simon&Schuster。对于他们使用的社交化媒体,主要选择了三个最主流的产品:Facebook、Twitter、Tumblr。Twitter图书俱乐部TwitterBookClubs通过在Twitter上使用话题标签(Hashtags)并且@作者,企鹅美国(PenguiUSA)与Twitter一同进行了一些创新。每个月,企鹅美国会选择他旗下的一位作者的图书,邀请Twitter上的用户通过#关键词#并且@作者的方式进行讨论,仿佛是在召开迷你的书友会。在Facebook中使用的不同策略六大出版商在Facebook中采取了不同的策略。Hachette不定期的更新其Facebook主页(九月份仅有3次更新),因此到目前为止仅仅收获了3998个喜欢。而RandomHouse(兰登书屋)每天进行平均三到四

  • JS-流程控制汇集

    <!DOCTYPEhtml> <html> <head> <metacharset="UTF-8"> <title>流程控制</title> <styletype="text/css"> .mg{ display:inline-block; padding:45px; padding-top:5px; margin-bottom:10px; border:3pxsolidrosybrown; -webkit-border-radius:23px; -moz-border-radius:23px; border-radius:23px; } input{ -webkit-border-radius:12px; -moz-border-radius:12px; border-radius:12px; border:1pxsolidroyal

  • 驱动开发:内核LDE64引擎计算汇编长度

    本章开始LyShark将介绍如何在内核中实现InlineHook挂钩这门技术,内核挂钩的第一步需要实现一个动态计算汇编指令长度的功能,该功能可以使用LDE64这个反汇编引擎,该引擎小巧简单可以直接在驱动中使用,LDE引擎是BeaEngine引擎的一部分,后来让BeatriX打包成了一个ShellCode代码,并可以通过typedef动态指针的方式直接调用功能,本章内容作为后期Hook挂钩的铺垫部分,独立出来也是因为代码太多太占空间一篇文章写下来或很长影响阅读。LDE反汇编引擎源代码:https://github.com/BeaEngine/lde64首先定义一个lyshark_lde64.h头文件,并写入如下ShellCode代码片段,当然这不是最新的,如果你需要最新的可以自己下载源代码编译后提取出来替换即可,不过该引擎很多年没有更新了替换的意义也不大毕竟功能就那么几行而已。//署名权 //righttosignone'snameonapieceofwork //thankstoAv0id,cyberbobandlena151fortheirremarksandadvices

  • PHP面向对象编程(1)基础

    一、面向对象OOP(OrientedObjectProgramming)   面向过程的编程 将要实现的功能描述为一个从一开始到结束的连续的“步骤(过程)”。 一次逐步完成这些步骤。如果步骤比较大,又可以将该步骤细分为子步骤,以此类推。 程序从头开始执行一直到结尾并得到手续的结果。   2.  面向对象的编程 将要实现的功能描述为一个“对象/物体”完成的任务一一实现也是如此:功能的实现都是依赖于一个实体的“行动/操作/动作”。 完成该最终功能的过程中需要实现其他中间功能(过程)则再去调用其他对象来实现该中间功能 整个系统的完成看做是一个一个对象在发挥各自的“能力”并在内部进行协调有序的调用过程。   3.  基本概念     1).类和对象 类:类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。 对象:对象是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。 关系:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类

  • 记对某系统的一次测试

    前言 第一次写文章,有不足的地方请各位师傅指正 确定站点 首先通过前期的信息收集得到了站点目标目标站点长这样,还是熟悉的登录框,此时我的思路是,爆破管理员的用户名和密码,但这里登录的方式很明显是通过手机号来登录的,也就是说还得知道管理员的手机号码才能进行爆破,难度有点大,先放弃这种方法,常规的话如果知道了管理员的用户名,还能去测一下找回密码处,是否有逻辑漏洞,因为本人信息收集能力不信,收集不到管理员的手机号码,所以爆破和找回密码这个点先放弃。 开始测试 上述的两个点都没法测试,此时我就可以试试目录扫描,利用目录扫描工具,看看是否有备份的源码,或者一些未授权的目录扫描一波过后也并没有发现可利用的点,然后我就想着去找一下js里面是否有未授权的接口,直接使用F12大法来分析一波,然后这里找了半天找到了一个似乎是获取用户列表的一个接口然后这里直接拼接访问一下这里出现了提示,说不允许get方法进行请求,那我改成post的方法试试看到回显的返回包,我心中窃喜,大概率是有戏的,这里提示我们的是请求参数缺失,pageIndex参数为空,那么我们可以直接构造一个pageIndex参数传过去看看接着提示我

  • php 的优缺点

    1.优点:开源免费性快捷性[程序开发快,运行快,技术本身学习快] 插件丰富,网上的解决方案有很多,而且还有庞大的开源社区可以提供帮助。 跨平台性强 效率高 图像处理 面向对象 [在php4,php5中,面向对象方面都有了很大的改进,php完全可以用来开发大型商业程序。] PHP 性能很强.配合简单、稳定、容易部署,总的来说php能帮你低成本完成事情 2.缺点, 1)函数命名不规范  驼峰法和下滑线,传参位置不一你知道的 2)单线程  ; PHP本身,一直以来php就是个单进程的程序;虽然php的pthreads扩展早就有了。但是它不够稳定,运行运行着就会莫名其妙的自己挂掉;php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个挂掉 3)核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。却少了这个使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的。这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万

  • linux与Windows下的heap

    Windows提供Heap相关的API,可以创建多个Heap。 但是Linux下只有一个意义上的Heap,就是DataSegment,由brk/sbrk系统调用来调整其大小。 参考:http://man7.org/linux/man-pages/man2/sbrk.2.html

  • Aspose.word组件介绍

    阅读目录 1.基本介绍 2.文档对象模型概述     本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 本博客其他.NET开源项目文章目录:http://www.cnblogs.com/asxinyu/p/4329755.html   我之前博客有一篇开源的Word读写组件的介绍:http://www.cnblogs.com/asxinyu/archive/2013/02/22/2921861.html ,引起了不少人的关注,机缘巧合,也使得我结识了一些朋友,由于DocX的一些原因(不稳定,更新很慢),我了解到了Aspose.Words这个组件,非常好,文档齐全,案例丰富,功能也很多,支持非常完善。所以我业余时间就把官方的文档和例子翻译和总结了一下,希望对大家有点帮助,同时也对自己是一个提高。我决定把这个组件的使用作为一个系列,目前已经有2篇的内容,后面的要根据时间慢慢写。 如对您有帮助,不要吝啬你的鼠标,支持一下哦,如翻译的不好,或者有错误漏洞,还请广大网友指出

  • Python_练习01

    给一个半径,求圆的面积和周长 #求圆面积公式:圆面积(S)=圆周率(π)*(圆半径(r)**2) #求圆周长公式:圆周长(C)=2*圆半径(r)*圆周率(π) r=int(input('number>>>')) print('Area={}'.format(3.14*r*r)) print('Circumference={}'.format(3.14*r*2)) #------执行结果------- number>>>5 Area=78.5 Circumference=31.400000000000002 复制 输入两个数,比较大小后,从小到大打印 num1=int(input('Pleaseinputthefirstnum:')) num2=int(input('Pleaseinputthesencondnum:')) ifnum1>num2: print(num2,num1) else: print(num1,num2) #------执行结果------- Pleaseinputthefirstnum:5 Pleasei

  • groupby 的妙用(注意size和count)

    Pandas的groupby()功能很强大,用好了可以方便的解决很多问题,在数据处理以及日常工作中经常能施展拳脚。 今天,我们一起来领略下groupby()的魅力吧。 首先,引入相关package: importpandasaspd importnumpyasnp复制 groupby的基础操作 df=pd.DataFrame({'A':['a','b','a','c','a','c','b','c'], ...:'B':[2,8,1,4,3,2,5,9], ...:'C':[102,98,107,104,115,87,92,123]}) ...:df ...: Out[2]: ABC 0a2102 1b898 2a1107 3c4104 4a3115 5c287 6b592 7c9123复制 按A列分组(groupby),获取其他列的均值 df.groupby('A').mean() Out[3]: BC A a2.0108.000000 b6.595.000000 c5.0104.666667复制 按多列进行分组(groupby) df.groupby(['A','B'

  • DataList

    DataList: DataList在呈显的时间会自动为模板内容加上Table表格 DataList多了两个模板:SelectedItemTemplate(选中项模板),EditItemTemplate(编辑项模板) 常用属性: RepeatColumns:每行显示的列数 RepeatDirection:显示的方向 RepeatLayout:布局模式(Table-表格布局,Flow-流式span布局) 常用命令按钮的CommandName 选择按钮-Select 编辑按钮-Edit 更新按钮-Update 取消按钮-Cancel 删除按钮-Delete 虽然DataList控件中每个按钮都有各自的事件,但尽量不要为每个按钮编写事件。应当把所有的按钮事件全都写在其DataList控件中,进行统一控制。这种方式称之为“事件反升机制” "选中"按钮被点击的时候会做两件事情: 1.触发SelectedIndexChange事件 2.显示SelectedItemTemplate模板 在DataList事件中找主键值: 1.设置DataKeyField属性为主键列的名

相关推荐

推荐阅读