Http协议基础知识
r equest
POST https://re.csdn.net/csdnbi HTTP/1.1
方法 url/uri 协议的版本号 1.1
Host: re.csdn.net
Connection: keep-alive
Content-Length: 167
Accept: */*
Origin: https://www.csdn.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.23 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Referer: https://www.csdn.net/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: uuid_tt_dd=10_19119862890-1514946902631-
786149;
__utma=17226283.1502834598.1514952032.1514952032.
1514952032.1;
__utmz=17226283.1514952032.1.1.utmcsr=(direct)|ut
mccn=(direct)|utmcmd=(none); kd_user_id=accb9177-
52d8-41f3-b69e-54bb338ffb23; UN=q331464542;
UM_distinctid=1610314af5bb3a-012f62bad56aa5-
71103742-1fa400-1610314af5ca34;
Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=1788*1*PC_
VC; BT=1523867282719;
smidV2=20180517165125ad3024b867497a0fbd79f81ef81c
dd4400ceee13dc5e27d30;
dc_session_id=10_1527227855207.688716;
Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=152741308
2,1527413263,1527413731,1527415074;
Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=15274229
24; dc_tos=p9dz2k
--------------
[{"headers":{"component":"enterprise","datatype":
"re","version":"v1"},"body":"{\"re\":\"ref=-
&mtp=4&mod=ad_popu_131&con=ad_content_2961%2Cad_o
rder_731&uid=-&ck=-\"}"}]
response
HTTP/1.1 200 OK
协议版本号 响应状态码 状态码对应的原因
Server: openresty
Date: Sun, 27 May 2018 12:08:44 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
Access-Control-Allow-Origin: https://www.csdn.net
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-
CustomHeader,Keep-Alive,User-Agent,X-Requested-
With,If-Modified-Since,Cache-Control,Content-
Type,body
2
ok
0
U U RL ( Uniform Resource Locator )
URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,基
本格式
例 如 :
http://www.gupaoedu.com:80/java/index.html?name=mic#head
schema://host[:port#]/path/.../?[url-params]#[ query-string]
scheme 指定应用层使用的协议(例如:http, https, ftp)
host HTTP 服务器的 IP 地址或者域名
port# HTTP 服务器的默认端口是 80,这种情况下端
口 号 可 以 省 略 。 如 果 使 用 了 别 的 端 口 , 必 须 指 明 , 例 如
http://www.gupaoedu.com:8080/
path 访问资源的路径
query-string 查询字符串
# 片段标识符(使用片段标识符通常可标记出已
获取资源中的子资源(文档内的某个位置))
URI(Uniform Resource Identifier)
每个 web 服务器资源都有一个名字,这样客户端就可以根据这个名字
来找到对应的资源,这个资源称之为(统一资源标识符)
总的来说:URI 是用一个字符串来表示互联网上的某一个资源。而 URL
表示资源的地点(互联网所在的位置)
做技术人的指路明灯,职场生涯的精神导师
方法
HTTP 发起的每个请求,都需要告诉告诉服务器要执行什么动作,那么
这个动作就是前面报文中看到的【method】。http 协议中提供了多个方
法,不同方法的使用场景也也不一样
GET:一般是用于客户端发送一个 URI 地址去获取服务端的资源(一般
用于查询操作)
POST:一般用户客户端传输一个实体给到服务端,让服务端去保存(一
般用于创建操作)
PUT:向服务器发送数据,一般用于更新数据的操作
HEAD:用于向服务端发起一个查询请求获取 head 信息,比如获取
index.html 的有效性、最近更新时间等。
DELETE:客户端发起一个 Delete 请求要求服务端把某个数据删除(一
般用于删除操作)
OPTIONS:查询指定 URI 支持的方法类型(get/post)
http1.1 还支持 trace(追踪路径)和 connect 方法类型
P HTTP 协议的特点
HTTP 协议是无状态的,什么是无状态呢?就是说 HTTP 协议本身不会
对请求和响应之间的通信状态做保存。
如何实现有状态的协议
Http 协议中引入了 cookie 技术,用来解决 http 协议无状态的问题。通
做技术人的指路明灯,职场生涯的精神导师
过在请求和响应报文中写入 Cookie 信息来控制客户端的状态;Cookie
会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部
字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送
请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
在基于 tomcat 这类的 jsp/servlet 容器中,会提供 session 这样的机制
来保存服务端的对象状态。那么整个状态协议的流程就是这样的
H HP TTP 协议的 缺陷
1. 通信过程中是使用明文,内容可能会被窃听
2. 不验证通信双方的身份
3. 无法验证报文的完整性,报文可能被篡改
HTTPS 的原理
S HTTPS 简介
由于 HTTP 协议通信的不安全性,所以人们为了防止信息在传输过程中
遭到泄漏或者篡改,就想出来对传输通道进行加密的方式 https。
https 是一种加密的超文本传输协议,它与 HTTP 在协议差异在于对数
据传输的过程中,https 对数据做了完全加密。由于 http 协议或者 https
协议都是处于 TCP 传输层之上,同时网络协议又是一个分层的结构,所
以在 tcp 协议层之上增加了一层 SSL(Secure Socket Layer,安全层)
或者 TLS(Transport Layer Security) 安全层传输协议组合使用用于构
造加密通道;
S HTTPS 的实现原理
做技术人的指路明灯,职场生涯的精神导师
1. 客户端发起请求(Client Hello 包)
a) 三次握手,建立 TCP 连接
b) 支持的协议版本(TLS/SSL)
c) 客户端生成的随机数 client.random,后续用于生成“对话密钥”
d) 客户端支持的加密算法
e) sessionid,用于保持同一个会话(如果客户端与服务器费尽周折
建立了一个 HTTPS 链接,刚建完就断了,也太可惜)
2. 服务端收到请求,然后响应(Server Hello)
a) 确认加密通道协议版本
b) 服务端生成的随机数 server.random,后续用于生成“对话密钥”
c) 确认使用的加密算法(用于后续的握手消息进行签名防止篡改)
做技术人的指路明灯,职场生涯的精神导师
d) 服务器证书(CA 机构颁发给服务端的证书)
3. 客户端收到证书进行验证
a) 验证证书是否是上级 CA 签发的, 在验证证书的时候,浏览器会
调用系统的证书管理器接口对证书路径中的所有证书一级一级
的进行验证,只有路径中所有的证书都是受信的,整个验证的结
果才是受信
b) 服务端返回的证书中会包含证书的有效期,可以通过失效日期来
验证 证书是否过期
c) 验证证书是否被吊销了
d) 前面我们知道 CA 机构在签发证书的时候,都会使用自己的私钥
对证书进行签名
证书里的签名算法字段 sha256RSA 表示 CA 机构使用 sha256
对证书进行摘要,然后使用 RSA 算法对摘要进行私钥签名,而
我们也知道 RSA 算法中,使用私钥签名之后,只有公钥才能进
行验签。
e) 浏览器使用内置在操作系统上的CA机构的公钥对服务器的证书
进行验签。确定这个证书是不是由正规的机构颁发。验签之后得
知 CA 机构使用 sha256 进行证书摘要,然后客户端再使用
sha256 对证书内容进行一次摘要,如果得到的值和服务端返回
的证书验签之后的摘要相同,表示证书没有被修改过
f) 验证通过后,就会显示绿色的安全字样
g) 客户端生成随机数,验证通过之后,客户端会生成一个随机数
做技术人的指路明灯,职场生涯的精神导师
pre-master secret,客户端根据之前的:Client.random +
sever.random + pre-master 生成对称密钥然后使用证书中的公
钥进行加密,同时利用前面协商好的加密算法,将握手消息取
HASH 值,然后用“随机数加密“握手消息+握手消息 HASH 值(签
名)”然后传递给服务器端;( 在这里之所以要取握手消息的 HASH
值,主要是把握手消息做一个签名,用于验证握手消息在传输过
程中没有被篡改过。 )
4. 服务端接收随机数
a) 服务端收到客户端的加密数据以后,用自己的私钥对密文进行解
密。然后得到client.random/server.random/pre-master secret. ,
再用随机数密码 解密 握手消息与 HASH 值,并与传过来的
HASH 值做对比确认是否一致。
b) 然后用随机密码加密一段握手消息(握手消息+握手消息的
HASH 值 )给客户端
5. 客户端接收消息
a) 客户端用随机数解密并计算握手消息的 HASH,如果与服务端发
来的 HASH 一致,此时握手过程结束,
b) 之后所有的通信数据将由之前交互过程中生成的 pre master
secret / client.random/server.random 通过算法得出 session
Key,作为后续交互过程中的对称密钥
----来自gupao课件
Http协议基础知识的更多相关文章
- 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识
第41章 HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...
- 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识
第35章 FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...
- 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识
第33章 SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...
- 【RL-TCPnet网络教程】第25章 DHCP动态主机配置协议基础知识
第25章 DHCP动态主机配置协议基础知识 本章节为大家讲解DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),通过前面章节对TCP和UDP ...
- 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
第16章 UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...
- IOS Socket 01-网络协议基础知识
1. 网络参考模型 OSI参考模型 TCP/IP参考模型 2. 七层简述 1)物理层:主要定义物理设备标准,如网线的接 ...
- TCP/IP 和HTTP 协议基础知识
来源:http://www.myhack58.com/Article/60/63/2014/50072.htm 相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过 ...
- TCP/IP网络协议基础知识集锦[转]
引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...
- USB协议基础知识笔记
usb协议 功能层: 控制传输.中断传输.块传输(批量传输).同步传输 设备层:管理USB设备.分配地址.读取设备描述符 总线接口层:采用NRZI编码-反向非归零编码(0将前一个电平翻转,1不翻转) ...
- TCP协议基础知识及wireshark抓包分析实战
TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...
随机推荐
- webGL之three.js入门3--材料篇
这几天在看李鹏程翻译的[美]Jos Dirksen的<Three.js开发指南>,看到第八章了,现在来总结一下threejs中材料的相关知识.顺带也看完了上海交大的张雯莉出的<thr ...
- JComboBox实现当前所选项功能和JFrame窗口释放资源的dispose()方法
JComboBox有一个 SelectedItem属性,所以使用getSelectedItem()就可以得到当前选中值. package ltb20180106; import javax.swing ...
- 测试教程网.unittest教程.2. 基本用法
From: http://www.testclass.net/pyunit/basic_example/ 我们通过最简单的例子来看一下unittest的基本用法,下面的代码测试了3个python字符串 ...
- Nexus3.6版私服搭建安装与配置教程
1.本地环境配置(Nexus3.6支持jdk版本1.6.1.7.1.8) 1.1.官网下载地址:https://www.sonatype.com/download-oss-sonatype ...
- 【HTTP】使用 RestTemplete 实现 post请求
如上图,要求: post请求; x-www-form-urlencoded 类型; 如下代码没有进行整理,但是测试OK package com.chinamobile.epic.http; impor ...
- WAP用户评论简单实现瀑布流加载
wap端经常会遇到产品或者评论的加载,但是分页的体验不是很好,所以选择通过js实现瀑布流加载方式. 第一步:需要动态加载的主要内容,这里需要动态加载的是li标签的内容 <ul class=&qu ...
- Oracle 锁的概念
用scott/orcl登录并且模拟数据 SQL> conn scott/orclConnected.SQL> create table tt(id int primary key); Ta ...
- centos6.5部署OpenStack单节点
环境 最小化安装的centos6.5 设置如下: 一.修改基本配置 1.修改主机名为controller [root@localhost ~]# hostname controller [root@l ...
- Js学习(1)
数据类型 简单数据类型 ◆number 数字类型 ◆string 字符串类型 ◆Boolean 布尔类型 ◆true 真 (正确的) ◆false 假(错误的) ◆u ...
- SCCM 2012 R2实战系列之二:前提工作准备
在上一篇中,我们完成了SQL Server 2012的安装和配置.现在跟大家分享SCCM安装前的准备工作. 2.1 SCCM 2012 R2 准备工作 2.1.1 创建并分配System Manage ...