计算机网络基础(HTTP和HTTPS的那点事)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36652619/article/details/98135536

目录

HTTP简介

HTTP特点

HTTP请求结构

HTTP响应结构

请求响应的步骤

状态码普及

GET和POST的区别

Cookie和Session

HTTPS(超文本传输安全协议)

SSL(Security Socket Layer)安全套接层

HTTPS数据传输过程

在数据交换前会进行一次握手确定信息

HTTP与HTTPS的区别

HTTPS基础上的更安全方案


HTTP简介

HTTP(超文本传输协议)协议是属于应用层的协议,基于请求-响应模式的无状态的应用层协议,基于TCP的连接方式,HTTP1.1版本给出一种持续连接的方式Keep-alive(长连接)。

它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。


 

HTTP特点

  1. 支持客户/服务器模式
  2. 简单高效 (客户端向服务器请求接口的时候只需发送请求方法【GET、POST、PUT、HEAD等】和路径,基于这种简单,使得它很高效)
  3. 灵活(允许传输任意类型的数据对象)
  4. 无连接(每次连接只处理一个请求,服务器收到客户端的请求,处理完请求,收到客户端的应答后,断开连接)
  5. 无状态(协议对事物的处理没有记忆能力,后续处理如果需要前面的信息,则必须再次传送)

HTTP请求结构

直接图解清晰明了

版本协议指http用那个版本的


HTTP响应结构

直接图解清晰明了,和请求的结构很像


请求响应的步骤

  1. 客户端连接Web服务器:浏览器与Web服务器的HTTP端口(80)建立TCP套接字连接
  2. 客户端向服务器发送HTTP请求(请求报文)
  3. 服务器接收请求,返回HTTP响应(服务器将客户端请求的内容写到TCP套接字,由客户端读取)
  4. 释放连接TCP连接
  5. 客户端解析HTML内容

 

状态码普及

1XX:指示信息(请求已接受,继续处理)

2XX:成功(请求成功接收)

3XX:重定向(完成请求需要更进一步操作)

4XX:客户端错误(请求有语法错误或请求无法实现)

5XX:服务端错误(可能是服务器接口出bug,服务器不能实现合法请求)


 

GET和POST的区别

HTTP报文层:GET请求信息位于URL、POST

数据库层面:GET符合幂等性(对数据库的一次操作或多次操作获得的结果是一致的)和安全性(没有改变数据库中的数据),因为GET操作对数据库是查询操作,所以不会改变数据库;POST不符合(POST会改变数据库)

其他:get请求参数可以被浏览器缓存和存储(比如收藏啥的),POST不行


 

Cookie和Session

HTTP请求是无状态的,所以Web可以通过Cookie和Session来保存用户的唯一标示

Cookie:服务端发给客户端的特殊信息(用户登录,服务端响应的时候把Cookie放在响应头里),以文本文件形式存在客户端的某处,客户端每次向服务器发送请求时都会带上这些信息(放在请求头),然后服务器会解析请求头里的Cookie从而动态的获取对应用户的信息返回。

Session:和Cookie不同,被保存在服务器端。程序要为某个请求创建Session的时候。

流程:服务器先检查客户端请求头是否包含session id,若包含,说明之前创建过Session,服务器会根据Session id吧Session找出来拿出里面的用户信息。没有Session id就创建一个Session,并生成一个唯一的Session id,Session id会发给客户端保存。

Session实现方式:

  1. 服务器生成Session id会通过Cookie发给客户端,客户端下次把Session id在Cookie里带上。
  2. URL回写方式,把Session id写在URL里。

 

HTTPS(超文本传输安全协议)

以计算机网络通信为目的的传输协议。在HTTP的基础上加上一个SSL层来保护交换数据隐私和完整性,也就是安全版HTTP

SSL(Security Socket Layer)安全套接层

为网络通信提供安全及数据完整性的一种安全协议,是操作系统对外的API,SSL3.0后更名为TLS,它通过身份验证和数据加密保证网络通信的安全和数据的完整性。

 

HTTP协议传输的数据其实就是一种形式的“裸奔”,随便开个抓包工具,请求响应看的一清二楚。那么HTTPS安全在哪里?

HTTPS数据传输过程

在数据交换前会进行一次握手确定信息

  1. 客户端将支持的加密信息算法发到服务器
  2. 服务器选择一种客户端支持的加密算法,SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,以证书的形式(证书发布CA机构、证书有效期公钥、所有者、签名等)发回给客户端
  3. 客户端(浏览器)验证证书的合法性:
  4. 证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。
  5. 客户端会随机生成一串密码结合证书公钥使用约定好的加密算法加密,用约定好的HASH计算握手消息,并用生成的一串密码对其加密发送给服务器
  6. 服务器使用私钥解密信息确定密码,使用密码解密握手消息验证HASH是否和客户端一致,使用密码加密响应信息发回客户端。
  7. 浏览器解密响应信息,对消息验证,握手结束,之后用之前生成的随机密码和对称算法对交互信息加密。

HTTP与HTTPS的区

  1. HTTPS密文传输,HTTP明文传输
  2. HTTPS使用443端口,HTTP使用80端口
  3. HTTPS是安全版的HTTP = HTTP  加密  认证  完整性保护
  4. 连接方式不同
  5. HTTPS需要向CA申请证书

HTTPS基础上的更安全方案

HSTS(HTTP Strict Transport Security)国际互联网工程组织IETF正在推行一种新的Web安全协议

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

因为在重定向HTTP跳HTTPS的时候,用户其实还是使用了HTTP有一定危险。

 

以上是对计算机网络基础(HTTP和HTTPS)的粗浅认识

转载请注明出处:https://blog.csdn.net/qq_36652619

 

 

展开阅读全文

关于CreateEvent的那点

12-13

今天写了一个线程同步的程序,突然发现了一个很怪异的问题,不知道大家有没有遇到过,先把代码贴出来:rnrn[code=C/C++]# include rn# include rnrnint g_Count = 0;rnHANDLE g_hEvent;rnrnDWORD WINAPI Thread1(LPVOID lpParameter)rnrn while(TRUE)rn rn WaitForSingleObject(g_hEvent, INFINITE);rn g_Count++;rn if(g_Count == 10)rn break;rn printf("Thread1 %d\n", g_Count);rn SetEvent(g_hEvent); //重置事件对象为“触发态”rn rn return 0;rnrnrnDWORD WINAPI Thread2(LPVOID lpParameter)rnrn while(TRUE)rn rn WaitForSingleObject(g_hEvent, INFINITE);rn g_Count++;rn if(g_Count == 10)rn break;rn printf("Thread2 %d\n", g_Count);rn SetEvent(g_hEvent); //重置事件对象为“触发态”rn rn return 0;rnrnrnrnint main()rnrn HANDLE hThread1, hThread2;rnrn hThread1 = CreateThread(NULL, 0, Thread1, NULL, 0, NULL);rn hThread2 = CreateThread(NULL, 0, Thread2, NULL, 0, NULL);rn CloseHandle(hThread1);rn CloseHandle(hThread2);rnrn g_hEvent = CreateEvent(NULL, FALSE, TRUE, NULL); //创建一个自动重置的事件对象,初始化为有信号(触发态)rnrn Sleep(1000); //让主线程“睡眠”一秒 rn rn CloseHandle(g_hEvent);rn return 0;rn[/code]rnrn针对上面的这段代码,有时却会输出一些意想不到的结果:rnrn[color=#FF0000]Thread1 22170rnThread1 22171rnThread1 22172rnThread1 22173rnThread1 22174rnThread1 22175rnThread1 22176rnThread1 22177rnThread1 22178rnThread1 22179rnThread1 22180rnThread1 22181rnThread1 22182rnThread1 22183rnThread1 22184rnThread1 22185rnThread1 22186rnThread1 22187rnThread1 22188rnThread1 22189rnThread1 22190rnThread1 22191rnThread1 22192rnThread1 22193rnThread1 22194rnThread1 22195rnThread1 22196rnThread1 22197rnThread1 22198rnThread1 22199rnThread1 22200rnThread1 22201rnThread1 22202rnThread1 22203rnThread1 22204rnThread1 22205rnThread1 22206rnThread1 22207rnThread1 22208rnThread1 22209rnThread1 22210rnThread1 22211rnThread1 22212rnThread1 22213rnThread1 22214rnThread1 22215rnThread1 22216rnThread1 22217rnThread1 22218rnThread1 22219rnThread1 22220rnThread1 22221rnThread1 22222rnThread1 22223rnThread1 22224rnThread1 22225rnThread1 22226rnThread1 22227rnThread1 22228rnThread1 22229rnThread1 22230rnThread1 22231rnThread1 22232rnThread1 22233rnThread1 22234rnThread1 22235rnThread1 22236rnThread1 22237rnThread1 22238rnThread1 22239rnThread1 22240rnThread1 22241rnThread1 22242rnThread1 22243rnThread1 22244rnThread1 22245rnThread1 22246rnThread1 22247rnThread1 22248rnThread1 22249rnThread1 22250rnThread1 22251rnThread1 22252rnThread1 22253rnThread1 22254rnThread1 22255rnThread1 22256rnThread1 22257rnThread1 22258rnThread1 22259rnThread1 22260rnThread1 22261rnThread1 22262rnThread1 22263rnThread1 22264rnThread1 22265rnThread1 22266rnThread1 22267rnThread1 22268rnThread1 22269rnThread1 22270rnThread1 22271rnThread1 22272rnThread1 22273rnThread1 22274rnThread1 22275rnThread1 22276rnThread1 22277rnThread1 22278rnThread1 22279rnThread1 22280rnThread1 22281rnThread1 22282rnThread1 22283rnThread1 22284rnThread1 22285rnThread1 22286rnThread1 22287rnThread1 22288rnThread1 22289rnThread1 22290rnThread1 22291rnThread1 22292rnThread1 22293rnThread1 22294rnThread1 22295rnThread1 22296rnThread1 22297rnThread1 22298rnThread1 22299rnThread1 22300rnThread1 22301rnThread1 22302rnThread1 22303rnThread1 22304rnThread1 22305rnThread1 22306rnThread1 22307rnThread1 22308rnThread1 22309rnThread1 22310rnThread1 22311rnThread1 22312rnThread1 22313rnThread1 22314rnThread1 22315rnThread1 22316rnThread1 22317rnThread1 22318rnThread1 22319rnThread1 22320rnThread1 22321rnThread1 22322rnThread1 22323rnThread1 22324rnThread1 22325rnThread1 22326rnThread1 22327rnThread1 22328rnThread1 22329rnThread1 22330rnThread1 22331rnThread1 22332rnThread1 22333rnThread1 22334rnThread1 22335rnThread1 22336rnThread1 22337rnThread1 22338rnThread1 22339rnThread1 22340rnThread1 22341rnThread1 22342rnThread1 22343rnThread1 22344rnThread1 22345rnThread1 22346rnThread1 22347rnThread1 22348rnThread1 22349rnThread1 22350rnThread1 22351rnThread1 22352rnThread1 22353rnThread1 22354rnThread1 22355rnThread1 22356rnThread1 22357rnThread1 22358rnThread1 22359rnThread1 22360rnThread1 22361rnThread1 22362rnThread1 22363rnThread1 22364rnThread1 22365rnThread1 22366rnThread1 22367rnThread1 22368rnThread1 22369rnThread1 22370rnThread1 22371rnThread1 22372rnThread1 22373rnThread1 22374rnThread1 22375rnThread1 22376rnThread1 22377rnThread1 22378rnThread1 22379rnThread1 22380rnThread1 22381rnThread1 22382rnThread1 22383rnThread1 22384rnThread1 22385rnThread1 22386rnThread1 22387rnThread1 22388rnThread1 22389rnThread1 22390rnThread1 22391rnThread1 22392rnThread1 22393rnThread1 22394rnThread1 22395rnThread1 22396rnThread1 22397rnThread1 22398rnThread1 22399rnThread1 22400rnThread1 22401rnThread1 22402rnThread1 22403rnThread1 22404rnThread1 22405rnThread1 22406rnThread1 22407rnThread1 22408rnThread1 22409rnThread1 22410rnThread1 22411rnThread1 22412rnThread1 22413rnThread1 22414rnThread1 22415rnThread1 22416rnThread1 22417rnThread1 22418rnThread1 22419rnThread1 22420rnThread1 22421rnThread1 22422rnThread1 22423rnThread1 22424rnThread1 22425rnThread1 22426rnThread1 22427rnThread1 22428rnThread1 22429rnThread1 22430rnThread1 22431rnThread1 22432rnThread1 22433rnThread1 22434rnThread1 22435rnThread1 22436rnThread1 22437rnThread1 22438rnThread1 22439rnThread1 22440rnThread1 22441rnThread1 22442rnThread1 22443rnThread1 22444rnThread1 22445rnThread1 22446rnThread1 22447rnThread1 22448rnThread1 22449rnThread1 22450rnThread1 22451rnThread1 22452rnThread1 22453rnThread1 22454rnThread1 22455rnThread1 22456rnThread1 22457rnThread1 22458rnThread1 22459rnThread1 22460rnThread1 22461rnThread1 22462rnThread1 22463rnThread1 22464rnThread1 22465rnThread1 22466rnThread1 22466rnThread1 22467[/color]rnrn不知道怎么会输出上面的这个结果,大家帮忙解释一下! 论坛

android 编码那点

03-02

自做了一个android小程序,用于访问本地的一个web项目下的一个网页。rn用浏览器去访问该该网页能够正常显示中文,而用android程序通过流去读取该网页,rn中文会被 "南少林" 之类的代码替代。rnrnrn rn[code=Java]rn<%@ page language="java" import="java.util.*" contentType="text/html; charset=GBK" pageEncoding="GBK"%>rn<%@ taglib uri="/struts-tags" prefix="s" %>rnrnrnrn[/code]rnrnweb网页如上: 通过浏览器访问会显示如下语句rn[id:110,name:"太极宗师",time:28,id:111,name:"南少林",time:38,id:112,name:"楚留香",time:30] rnrnrnrn通过 android 程序读取网页信息代码如下:rn[code=Java]rn public static String getHtml(String textsrc) throws Exception rn rn URL url=new URL(textsrc);rn HttpURLConnection URLConnection=(HttpURLConnection) url.openConnection();rn URLConnection.setConnectTimeout(5000);rn URLConnection.setRequestMethod("GET");rn rn byte by[];rn if(URLConnection.getResponseCode()==200)rn rn InputStream inputStream=URLConnection.getInputStream();rn by=Inpututil.getinput(inputStream);rn inputStream.close();rn return new String(by);rn rn rn rn return null;rn rn[/code]rnrnrn[code=Java]rnpublic class Inpututil rnrn public static byte[] getinput(InputStream input) throws Exception rn ByteArrayOutputStream outputStream=new ByteArrayOutputStream();rn byte by[]=new byte[1024];rn int len=0;rn while((len=input.read())!=-1)rn rn input.read(by);rn outputStream.write(by);rn rn rn input.close();rn byte bt[]=outputStream.toByteArray();rn System.out.println(new String(bt,"GBK"));//想在这里输出与浏览器中一样的内容,可输出乱码,求解rn return bt;rn rnrnrn[/code]rnrn 论坛

没有更多推荐了,返回首页