你需要掌握的http知识
作为一名前端er,http是我们必须要掌握的,那么我们到底需要掌握哪些东西呢
一、基础知识
这里我们介绍与http相关的TCP、IP、DNS、url、uri
1.IP
IP地址是我们很熟悉的东西,最常见的的就是127.0.0.1。我们都知道连接网络后,每个人都会有不同的IP地址,而每台计算机也有自己的mac地址(这个地址是硬件写死的),那么我们传输信息的时候只要知道对方的IP地址,然后再和mac地址配对就基本可以确定接受信息方;而传输过程中我们肯定是希望信息高效传递过去,那么传输方式以及传输路径就要找到最好的方式。IP协议就是做这些事情的,IP是指IP协议而不是我们常常说的IP地址,它位于网络层,所要做的事情主要是以下三点:
1)寻址和路由;
2)传递服务;
3)数据包的分片和重组;
2.TCP
首先按照分层,TCP位于传输层,提供字节流服务。那么什么是字节流呢?网络传输数据就像汽车运输货物一样,比如我们运输的是信号塔,这么大不可能一下子运到目的地,这时候就需要一部分一部分运过去,再组装起来。而TCP确保数据能到达目的地。运输货物我们打个就可以通知是否送到了,TCP要用什么方式呢?看图说话
3.DNS
我们要访问一台服务器的东西,需要知道它的地址,IP地址可以作为一个标识,但是四个数字是很不好记的,因此诞生了域名这个东西,比如www.qq.com,我们可以访问到腾讯主页,但这个是怎么找到对应到腾讯的服务器呢?DNS服务就是干这个的,它处于应用层,当然它也可以通过IP来查找对应的域名。
4.URL和URI
URL: 统一资源定位符
URI: 统计资源标识符
URI用来标识某个互联网资源,而URL是资源的位置,所以URL是URI的子集。这里知道简单区别即可。
二、http报文
http报文分为请求报文和响应报文,HTTP请求报文:一个HTTP请求报文由请求行、请求头部、空行和请求数据4部分组成。HTTP响应报文:由三部分组成:状态行、消息报头、响应正文。综合两种报文,我们把报文分为一下结构
1.请求行
主要呈现请求的基本信息,包括请求的目标,协议版本,以及请求方法。目标就是一个url,比如我们要请求的网址或者跟后端协定好的接口地址。协议版本指http1.0、http1.1等。请求方法最常见的GET、POST,在http1.1总共有八种,这里不再一一阐述,最常见的GET、POST区别可以参考这篇文章
2.状态行
状态行就主要表示请求结果了,这里主要涉及状态码后面第三部分会说到
3.首部字段
这里首部字段就有通用首部字段、请求首部字段以及响应首部字段三种。
常用的首部字段比如Date(日期),Pragma、cache-control(缓存相关),Upgrade(协议升级,比如使用websocket)等。
请求首部字段比如Accept-*系列(表示优先级的,Charset字符集,Encoding编码,Language语言等),缓存类的(Etag和modified相关),referer(请求方)等。
相应首部字段比如缓存相关(Etag和modified相关),服务器信息(Server),重定向(Location)等。
4.其他
http中未定义的一些字段,比如cookie
5.报文主体
请求报文主要是请求信息,query、body参数等。响应报文主要是服务器返回的信息。
三、状态码
##### 1xx:
信息类型,表示在处理了。
2xx:
成功类型。比如常见的200,服务器处理成功但是不返回实体信息的204等。
3xx:
需要附加操作的,比如重定向(301永久重定向,302临时重定向)和使用缓存(304,这里结合几个首部字段使用,具体可以参考http缓存)
4xx:
客户端错误,比如参数错误(400),认证失败(401),没有访问权限(403),资源不存在(404)等
5xx:
服务器错误,比如服务端执行错误或者故障(500),服务器暂时无法处理(503),超时(504),协议有问题(505)等
三、身份认证
身份认证主要有以下五种方式
1.承载用户身份信息的HTTP首部(比如referer)
2.客户端IP地址跟踪,通过用户的IP地址对其进行识别
3.用户登录,用认证方式来识别用户(这里需要了解token机制)
4.胖URL,一种在URL中嵌入识别信息的技术
5.cookie,一种功能强大且高效的持久身份识别技术
四、安全
1.请求头中的安全机制
CSP策略
可以采用请求头设置方式
Content-Security-Policy: policy
Content-Security-Policy: default-src 'self'(自定义)
当然也可以在meta标签中设置,比如(来自mdn)。
X-Frame-Options
防止点击劫持
X-XSS-Protection
控制浏览器XSS防止的开关
2.cookie安全
比如cookie加密,设置HttpOnly和secure
五、其他
https:四次握手,ssl/tls协议,加密等。
http2:优势,多路复用、头部压缩、流的优先级等。
六、总结
这里只针对http我们需要掌握的基本信息做一个大概的总结,具体的某方面知识建议查看数据去了解,虽然我们在编写代码(写bug中)过程中几乎不会用到http,但是我们的项目运行却是离不开它,因此掌握基本的http对性能优化,安全等都是很有帮助的。有书写错误或者解释错误的欢迎指出!
你需要掌握的http知识的更多相关文章
- 你必须知道的EF知识和经验
注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 学点HTTP知识
不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊.平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问题,光看是没有用的,需要实践.看别人说的 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- [C#] C# 知识回顾 - 学会处理异常
学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...
- [C#] C# 知识回顾 - 学会使用异常
学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...
- [C#] C# 知识回顾 - 异常介绍
异常介绍 我们平时在写程序时,无意中(或技术不够),而导致程序运行时出现意外(或异常),对于这个问题, C# 有专门的异常处理程序. 异常处理所涉及到的关键字有 try.catch 和 finally ...
- [.NET] C# 知识回顾 - Event 事件
C# 知识回顾 - Event 事件 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6060297.html 序 昨天,通过<C# 知识回顾 - ...
- [.NET] C# 知识回顾 - 事件入门
C# 知识回顾 - 事件入门 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6057301.html 序 之前通过<C# 知识回顾 - 委托 de ...
随机推荐
- 「uoj#188. 【UR #13】Sanrd」
题目 不是很能看懂题意,其实就是求\([l,r]\)区间内所有数的次大质因子的和 这可真是看起来有点鬼畜啊 这显然不是一个积性函数啊,不要考虑什么特殊的函数了 我们考虑Min_25筛的过程 设\(S( ...
- 压缩Windows系统磁盘
compact /compactOS:always #压缩所有 OS 二进制文件并将系统状态设置为"压缩" compact /compactOS:never #减压缩所有 OS 二 ...
- 几句代码简单实现IoC容器
前言 最近在调试EasyNetQ代码的时候发现里面有一段代码,就是IoC容器的简单实现,跟着他的代码敲了一遍,发现了奇妙之处.当然也是因为我才疏学浅导致孤陋寡闻了.他的思路就是通过动态调用构造函数生成 ...
- 图片验证码——base64编码的使用
一.介绍: 1.base64编码简介: Base64就是一种编码格式.Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成 ...
- jQuery中append()、prepend()与after()、before()的区别
转载 未曾见海 https://www.cnblogs.com/afei-qwerty/p/6682963.html 在jQuery中,添加元素有append(),prepend() 和 after ...
- kafka topic制定规则
kafka topic的制定,我们要考虑的问题有很多,比如生产环境中用几备份.partition数目多少合适.用几台机器支撑数据量,这些方面如何去考量?笔者根据实际的维护经验,写一些思考,希望大家指正 ...
- python3爬虫-网易云排行榜,网易云歌手及作品
import requests, re, json, os, time from fake_useragent import UserAgent from lxml import etree from ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 052-053
今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...
- 2018 Wannafly summer camp Day8--连通块计数
连通块计数 描述 题目描述: 小 A 有一棵长的很奇怪的树,他由 n 条链和 1 个点作为根构成,第 i条链有 ai 个点,每一条链的一端都与根结点相连. 现在小 A 想知道,这棵长得奇怪的树有多少 ...
- 【HDOJ 1337】I Hate It(线段树维护区间最大值)
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写 ...