http 订阅
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。 [1] 展开全文
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。 [1]
信息
外文名
HTTP
适用浏览器
Firefox、Google chrome等
作    用
规定WWW服务器与浏览器之间信息传递规范
中文名
超文本传输协议
工作层
应用层
基    础
架构在TCP协议上
http简介
万维网WWW(world wide web)发源于欧洲日内瓦量子物理实验室CERN,正是WWW技术的出现使得因特网得以超乎想象的速度迅猛发展。这项基于TCP/IP的技术在短短的十年时间内迅速成为已经发展了几十年的Internet上的规模最大的信息系统,它的成功归结于它的简单、实用。在WWW的背后有一系列的协议和标准支持它完成如此宏大的工作,这就是Web协议族,其中就包括HTTP超文本传输协议。 在1990年,HTTP就成为WWW的支撑协议。当时由其创始人WWW之父蒂姆·贝纳斯·李(TimBerners—Lee)提出,随后WWW联盟(WWW Consortium)成立,组织了IETF(Internet Engineering Task Force)小组进一步完善和发布HTTP协议。 [2]  HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP协议进行通信的HTTP的实现程序。HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、curl等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。 [3] 
收起全文
精华内容
下载资源
问答
  • 火狐的Http请求插件的安装和使用

    万次阅读 多人点赞 2019-07-31 19:10:40
    火狐有一个http请求插件,安装之后就可以用它来测试各种http请求了(GET/POST/PUT/DELETE)。 安装步骤如下: 1、打开火狐的附加组件管理器 2、在左边菜单栏选择插件 3、在搜索栏搜索httpRequest 4、选择并...

    火狐有一个http请求插件,安装之后就可以用它来测试各种http请求了(GET/POST/PUT/DELETE)。
    安装步骤如下:
    1、打开火狐的附加组件管理器

    2、在左边菜单栏选择插件

    3、在搜索栏搜索httpRequest

    4、选择并安装,然后重启浏览器

    5、以上步骤完成后,在浏览器右上角就已经出现该插件了

    6、点击它即可打开,然后就可以模拟http请求了

    是个十分实用的小工具!

    展开全文
  • HTTP 304状态码的详细讲解

    万次阅读 多人点赞 2017-04-12 10:33:55
    HTTP 304错误状态码的详细讲解 304缓存策略及实现 网页web常见状态码:200,301,302,304,400,401,404,500

     

    HTTP 304状态码的详细讲解


    304状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。

     

    整个请求响应过程如下:


    客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Last Modified 。因此,如果请求中包含 If Modified Since,就说明已经有缓存在客户端。服务端只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200 。
    对于静态文件,例如:CSS、图片,服务器会自动完成 Last Modified 和 If Modified Since 的比较,完成缓存或者更新。但是对于动态页面,就是动态产生的页面,往往没有包含 Last Modified 信息,这样浏览器、网关等都不会做缓存,也就是在每次请求的时候都完成一个 200 的请求。
    因此,对于动态页面做缓存加速,首先要在 Response 的 HTTP Header 中增加 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。虽然在返回 304 的时候已经做了一次数据库查询,但是可以避免接下来更多的数据库查询,并且没有返回页面内容而只是一个 HTTP Header,从而大大的降低带宽的消耗,对于用户的感觉也是提高。当这些缓存有效的时候,通过 Fiddler 或HttpWatch 查看一个请求会得到这样的结果:

     

     


    第一次访问 200
    按F5刷新(第二次访问) 304
    按Ctrl+F5强制刷新 200

    下面用Fiddler来查看上面的访问请求过程

    第一次(首次)访问 200

     

     

    第二次F5刷新访问 304


    请求的头信息里多了 “If-Modified-Since","If-None-Match" 

     

     

     


    第三次 按Ctrl+F5强制刷新 200

    同第一次,不贴图了

     

     

     

    为什么要使用条件请求

    当用户访问一个网页时,条件请求可以加速网页的打开时间(因为可以省去传输整个响应体的时间),但仍然会有网络延迟,因为浏览器还是得为每个资源生成一条条件请求,并且等到服务器返回HTTP/304响应,才能读取缓存来显示网页.更理想的情况是,服务器在响应上指定Cache-Control或Expires指令,这样客户端就能知道该资源的可用时间为多长,也就能跳过条件请求的步骤,直接使用缓存中的资源了.可是,即使服务器提供了这些信息,在下列情况下仍然需要使用条件请求:

    在超过服务器指定的过期时间之后
    如果用户执行了刷新操作的话
    在上节给出的图片中,请求头中包含了一个Pragma: no-cache.这是由于用户使用F5刷新了网页.如果用户按下了CTRL-F5 (有时称之为“强刷-hard refresh”),你会发现浏览器省略了If-Modified-Since和If-None-Match请求头,也就是无条件的请求页面中的每个资源.

    避免条件请求
    通常来说,缓存是个好东西.如果你想提高自己网站的访问速度,缓存是必须要考虑的.可是在调试的时候,有时候需要阻止缓存,这样才能确保你所访问到的资源是最新的.

    你也许会有个疑问:“如果不改变网站内容,我怎么才能让Fiddler不返回304而返回一个包含响应体的HTTP/200响应呢?”

    你可以在Fiddler中的网络会话(Web Sessions)列表中选择一条响应为HTTP/304的会话,然后按下U键.Fiddler将会无条件重发(Unconditionally reissue)这个请求.然后使用命compare命令对比一下两个请求有什么不同,对比结果如下,从中可以得知,Fiddler是通过省略条件请求头来实现无缓存请求的:

    Screenshot of Windiff of conditional and unconditional requests

    如果你想全局阻止HTTP/304响应,可以这么做:首先清除浏览器的缓存,可以使用Fiddler工具栏上的Clear Cache按钮(仅能清除Internet Explorer缓存),或者在浏览器上按CTRL+SHIFT+DELETE(所有浏览器都支持).在清除浏览器的缓存之后,回到Fiddler中,在菜单中选择Rules > Performance > Disable Caching选项,然后Fiddler就会:删除所有请求中的条件请求相同的请求头以及所有响应中的缓存时间相关的响应头.此外,还会在每个请求中添加Pragma: no-cache请求头,在每个响应中添加Cache-Control: no-cache响应头,阻止浏览器缓存这些资源.

     

     

     

     

     

    动态网页如何设置304

    以aspx页面为例,代码如下:

     

    var request = context.Request;
                var response = context.Response;
                if (request.Headers["If-Modified-Since"].NotNullOrEmpty() || request.Headers["If-None-Match"].NotNullOrEmpty())
                {
                    response.StatusCode = 304;
                    return;
                }
    //非304情况下的操作 略
    //设置缓存选项
                response.Clear();
                response.ClearContent();
                response.Headers["Last-Modified"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                response.Headers["ETag"] = id;//这里假设的是根据不同的id
                response.CacheControl = "private";
                response.ExpiresAbsolute = DateTime.Now.AddMonths(6);
               

     

    ETag是什么意思?

    HTTP 协议规格说明定义ETag为“被请求变量的实体值” 。 另一种说法是,ETag是一个可以与Web资源关联的记号(token)。典型的Web资源可以一个Web页,但也可能是JSON或XML文档。服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端
     

    asp.net web api的实现代码如下:

     

    // GET /images/001.png 
    [HttpGet] 
    public HttpResponseMessage Get(string filename) 
    { 
    	HttpResponseMessage response = new HttpResponseMessage();  
    
    	.....
    	string etag = string.Format("\"{0}\"", fileInfo.MD5); 
    	var tag = Request.Headers.IfNoneMatch.FirstOrDefault(); 
    	if (Request.Headers.IfModifiedSince.HasValue && tag != null && tag.Tag == etag) 
    	{ 
    		response.StatusCode = HttpStatusCode.NotModified; 
    	} 
    	else 
    	{ 
    		//dealcode ......
    		responseStream.Position = 0; 
    		response.StatusCode = fullContent ? HttpStatusCode.OK : HttpStatusCode.PartialContent; 
    		response.Content = new StreamContent(responseStream); 
    		response.Content.Headers.ContentType = new MediaTypeHeaderValue(fileInfo.ContentType); 
    		response.Headers.ETag = new EntityTagHeaderValue(etag); 
    		response.Headers.CacheControl = new CacheControlHeaderValue(); 
    		response.Headers.CacheControl.Public = true; 
    		response.Headers.CacheControl.MaxAge = TimeSpan.FromHours(480); 
    		response.Content.Headers.Expires = DateTimeOffset.Now.AddDays(20); 
    		response.Content.Headers.LastModified = fileInfo.UploadDate; 
    	} 
    	return response;
    }

     

    常见状态码:

    一些常见的状态码为:

    • 200 – 服务器成功返回网页
    • 404 – 请求的网页不存在
    • 503 – 服务器超时

    下面提供 HTTP 状态码的完整列表。点击链接可了解详情。您也可以访问 HTTP 状态码上的 W3C 页获取更多信息

    1xx(临时响应)
    表示临时响应并需要请求者继续执行操作的状态码。

    100(继续)请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
    101(切换协议)请求者已要求服务器切换协议,服务器已确认并准备切换。

    2xx (成功)

    表示成功处理了请求的状态码。

    200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt 文件显示此状态码,则表示 Googlebot 已成功检索到该文件。
    201(已创建)请求成功并且服务器创建了新的资源。
    202(已接受)服务器已接受请求,但尚未处理。
    203(非授权信息)服务器已成功处理了请求,但返回的信息可能来自另一来源。
    204(无内容)服务器成功处理了请求,但没有返回任何内容。
    205(重置内容)服务器成功处理了请求,但没有返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。
    206(部分内容)服务器成功处理了部分 GET 请求。

    3xx (重定向)
    要完成请求,需要进一步操作。通常,这些状态码用来重定向。Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。

    300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
    301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。
    302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。
    303(查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。
    304(未修改)

    自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

    如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。

     

    305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
    307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 <a href=answer.py?answer=>301</a> 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。

    4xx(请求错误)
    这些状态码表示请求可能出错,妨碍了服务器的处理。

    400(错误请求)服务器不理解请求的语法。
    401(未授权)请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。
    403(禁止)服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码(您可以在 Google 网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝了 Googlebot 访问。
    404(未找到)

    服务器找不到请求的网页。例如,对于服务器上不存在的网页经常会返回此代码。

    如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具“诊断”标签的 robots.txt 页上看到此状态码,则这是正确的状态码。但是,如果您有 robots.txt 文件而又看到此状态码,则说明您的 robots.txt 文件可能命名错误或位于错误的位置(该文件应当位于顶级域,名为 robots.txt)。

    如果对于 Googlebot 抓取的网址看到此状态码(在”诊断”标签的 HTTP 错误页面上),则表示 Googlebot 跟随的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。

    405(方法禁用)禁用请求中指定的方法。
    406(不接受)无法使用请求的内容特性响应请求的网页。
    407(需要代理授权)此状态码与 <a href=answer.py?answer=35128>401(未授权)</a>类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。
    408(请求超时)服务器等候请求时发生超时。
    409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,以及两个请求的差异列表。
    410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。该代码与 404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301 指定资源的新位置。
    411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
    412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
    413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
    415(不支持的媒体类型)请求的格式不受请求页面的支持。
    416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态码。
    417(未满足期望值)服务器未满足”期望”请求标头字段的要求。

    5xx(服务器错误)
    这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

    500(服务器内部错误)服务器遇到错误,无法完成请求。
    501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
    502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
    503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
    504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。

     

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,分享一下给大家点击跳转到教程

     

    引用内容源址:

    http://www.jb51.net/article/43143.htm

    http://blog.sina.com.cn/s/blog_4c98b9600100jd4z.html

    http://www.cnblogs.com/shanyou/archive/2012/05/01/2477500.html

    --- end ---

     

    展开全文
  • HTTP 和 HTTPS 的区别(面试常考题)

    万次阅读 多人点赞 2018-07-09 14:23:35
    无论是在校学习还是找工作的时候,老师和面试官都问过同学http和https的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里Http的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,...

    前言

    无论是在校学习还是找工作的时候,老师和面试官都问过同学 HTTP 和 HTTPS 的区别。平时上网的时候也没有关注这个问题,只是知道计算机网络里 HTTP 的概念,所以最近才查资料好好补补这一块。其实这一块的知识延伸很广,如果之前不太了解加密算法和 SSL 协议,可以在学习了这个问题的基础上再做研究。

    TLS/SSL 工作原理及握手过程详解:https://tyler-zx.blog.csdn.net/article/details/107591115

     

    一、HTTP 和 HTTPS 的基本概念

    HTTP超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息

    HTTP 原理:

    ①  客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。

    ②  服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。

     

    HTTPS是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol)它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

                                                           

     

    HTTPS 设计目标

    (1) 数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么  。

    (2) 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。

    (3) 身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方  。

     

    二、HTTP 与 HTTPS  的区别

    1、HTTPS  协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

    2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

    3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

     

    三、HTTPS 相对于 HTTP 的改进

    双向的身份认证

    客户端服务端在传输数据之前,会通过基于X.509证书对双方进行身份认证 。具体过程如下

    客户端发起 SSL 握手消息给服务端要求连接。

    服务端将证书发送给客户端。

    客户端检查服务端证书,确认是否由自己信任的证书签发机构签发(客户端内置了所有受信任 CA 的证书)。 如果不是,将是否继续通讯的决定权交给用户选择 ( 注意,这里将是一个安全缺陷 )。如果检查无误或者用户选择继续,则客户端认可服务端的身份。

    服务端要求客户端发送证书,并检查是否通过验证。失败则关闭连接,认证成功则从客户端证书中获得客户端的公钥,一般为 1024 位或者 2048 位。到此,服务器客户端双方的身份认证结束,双方确保身份都是真实可靠的。

    注意:

    (1) 采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问。这套证书其实就是一对公钥和私钥。

    (2) 互联网有太多的服务需要使用证书来验证身份,以至于客户端(操作系统或浏览器等)无法内置所有证书,需要通过服务端将证书发送给客户端。

    (3) 客户端内置的是 CA 的根证书(Root Certificate),HTTPS 协议中服务器会发送证书链(Certificate Chain)给客户端。

     

    数据传输的机密性

    客户端和服务端在开始传输数据之前,会协商传输过程需要使用的加密算法。 客户端发送协商请求给服务端, 其中包含自己支持的非对成加密的密钥交换算法 ( 一般是RSA),数据签名摘要算法 ( 一般是SHA或者MD5) ,加密传输数据的对称加密算法 ( 一般是DES),以及加密密钥的长度。 服务端接收到消息之后,选中安全性最高的算法,并将选中的算法发送给客户端,完成协商。客户端生成随机的字符串,通过协商好的非对称加密算法,使用服务端的公钥对该字符串进行加密,发送给服务端。 服务端接收到之后,使用自己的私钥解密得到该字符串。在随后的数据传输当中,使用这个字符串作为密钥进行对称加密。

     

    防止重放攻击

    SSL 使用序列号来保护通讯方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个 SSL 握手中,都有一个唯一的随机数来标记 SSL 握手。 这样防止了攻击者嗅探整个登录过程,获取到加密的登录数据之后,不对数据进行解密,而直接重传登录数据包的攻击手法。

    可以看到,鉴于电子商务等安全上的需求,HTTPS 对比 HTTP 协议,在安全方面已经取得了极大的增强。总结来说,HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行非对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。

     

    四、HTTPS 的优点

    1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器

    2、HTTPS 协议是由SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。

    3、HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

     

    五、HTTPS 的缺点(对比优点)

    1、HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近

    2、HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。

    3、HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。

    4、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。

    5、成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。

    6、HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

     

    六、HTTPS 的连接过程

    https://blog.csdn.net/kobejayandy/article/details/52433660(图片是我借用这位大佬的,大家可以看看) 

    图片中的过程是按 8 个步骤分的,但是网上有更详细的步骤,所以我把详细的过程和这个图片配在一起。

    ① 客户端的浏览器向服务器发送请求,并传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

    ② 服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。

    ③ 客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的 "发行者的数字签名",服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。

    ④ 用户端随机产生一个用于通讯的 "对称密码",然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。

    ⑤ 如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的密钥一起传给服务器。

    ⑥ 如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的 CA  是否可靠,发行 CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的私钥,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

    ⑦ 服务器和客户端用相同的对称加密密钥,对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。

    ⑧ 客户端服务器端发出信息,指明后面的数据通讯将使用的步骤 ⑦ 中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。

    ⑨ 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤 ⑦ 中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。

    ⑩ SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。

     

    上述的过程需要弄懂的核心思想

    客户端解析证书

    这部分工作是由客户端的 TLS 来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个对称加密密钥,然后用公钥对该密钥进行非对称加密。

     

    传送加密信息

    这部分传送的是用公钥加密后的对称加密密钥,目的就是让服务端得到这个密钥,以后客户端和服务端的通信就可以通过这个密钥来进行加密解密了。

     

    服务端解密信息

    服务端用非对称加密算法里的私钥解密后,得到了客户端传过来的对称加密算法的私钥,然后把之后传输的内容通过该值进行对称加密。

     

    为什么用非对称加密协商对称加密密钥

    对称加密的特点:对称密码体制中只有一种密钥,并且是非公开的。如果要解密就得让对方知道密钥,所以想要保证其安全性就要保证密钥的安全

    非对称加密的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了,这样安全性就大了很多。

    非对称加密公钥和私钥的使用方法:(1) 公钥加密私钥解密。(2) 私钥做数字签名,公钥验证。

     

    补充:

    SSL 提供服务

    (1) 认证用户和服务器,确保数据发送到正确的客户机服务器

    (2) 加密数据以防止数据中途被窃取;

    (3) 维护数据的完整性,确保数据在传输过程中不被改变。

     

    SSL 工作流程

    服务器认证阶段:

    (1) 客户端向服务器发送一个开始信息 "Hello" 以便开始一个新的会话连接;

    (2) 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的 "Hello" 信息时将包含生成主密钥所需的信息;

    (3) 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;

    (4) 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。

     

    用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

     

    SSL 协议提供的安全通道有以下三个特性:

    机密性:SSL 协议使用密钥加密通信数据。

    可靠性:服务器和客户都会被认证,客户的认证是可选的。

    完整性:SSL 协议会对传送的数据进行完整性检查。

     

    服务器证书(server certificates)是 SSL 数字证书的一种形式,意指通过提交数字证书来证明您的身份或表明您有权访问在线服务。再者简单来说,通过使用服务器证书可为不同站点提供身份鉴定并保证该站点拥有高强度加密安全。是组成 Web 服务器的 SSL 安全功能的唯一的数字标识。通过相互信任的第三方组织获得,并为用户提供验证您 Web 站点身份的手段。服务器证书包含详细的身份验证信息,如服务器内容附属的组织、颁发证书的组织以及称为公开密钥的唯一的身份验证文件。

    展开全文
  • Http状态码406(Not Acceptable) 错误问题解决方法

    万次阅读 多人点赞 2018-11-08 20:13:31
    状态码406:HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。说白了就是后台的返回结果前台无法解析就报406错误。 示例代码中请求代码,后台代码均正常,且有返回信息。如下图: $.ajax({ ...

    状态码406:HTTP协议状态码的一种(4xx表示客户端的问题),表示客户端无法解析服务端返回的内容。说白了就是后台的返回结果前台无法解析就报406错误。

    示例代码中请求代码,后台代码均正常,且有返回信息。如下图:

    $.ajax({
                url:'http://localhost:8080/findDsrwByDsrwid',
                type : 'post',
                data :{
                    id : cztj
                },
                dataType:'json',
            }).success(function(result){
              }

    那我们来看看网页状态:

    状态码:406,请求头(Request Headers)中看到Accept优先是application/json格式,而响应头(Response Hraders)中却发现返回信息的格式是“text/html”,前台无法解析,需将结果转换成json格式返回给前台。

    解决方案:

    jackson开源工具(springMVC天然支持)

    导入jackson-core和jackson-mapper-asl的依赖包,如果你是maven工程,在pom加入

     <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.1.4</version>
        </dependency>
    
          <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
          <dependency>
              <groupId>org.codehaus.jackson</groupId>
              <artifactId>jackson-mapper-asl</artifactId>
              <version>1.9.12</version>
          </dependency>

    此时还需要关注springMVC的一个配置,具体原因请看原理解析。

    原理解析:

    为什么只要导入jar就好了呢?是因为spring mvc 配置了 <mvc:annotation-driver/> 后 ,如果classpath 里面包含jackson 包,则自动注册MappingJackson2HttpMessageConverter,从而支持json 输出。

    这是springMVC中的一句配置

    <!-- 能支持springmvc更高级的一些功能,JSR303,快捷的ajax -->
    <mvc:annotation-driven/>

    且annotation-driver是被AnnotationDrivenBeanDefinitionParser解析,这里提供另外一篇博文,希望有所帮助。

    spring mvc jackson 支持原理分析_taotoxht的专栏-CSDN博客_jackson 原理

    结果展示:

    ————————————————————————————————————————————————————

    2020.01.30:,今天搭了另外一个项目的环境,项目依赖中已有jackson-annotations-*.jar,jackson-core-.jar,jackson-databind-.jar 包,打开注解驱动依然报406,如果有同学试了以上方案不行的话,可以试着尝试fastjson替代jackson,具体是:

    引入jar包:

            <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.58</version>
            </dependency>

    注解驱动配置为:

    	<mvc:annotation-driven>
    		<mvc:message-converters register-defaults="true">
    			<!-- 配置Fastjson支持 -->
    			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
    				<property name="supportedMediaTypes">
    					<list>
    						<value>application/json</value>
    						<value>text/html;charset=UTF-8</value>
    					</list>
    				</property>
    <!--				<property name="features">
    					<list>
    						<value>WriteMapNullValue</value>
    						<value>QuoteFieldNames</value>
    					</list>
    				</property>-->
    			</bean>
    		</mvc:message-converters>
    	</mvc:annotation-driven>

    结果: 

    展开全文
  • 这几天项目总是在凌晨挂机...Http11Processor - Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentExceptio...
  • HTTP协议经典面试题整理及答案详解

    万次阅读 多人点赞 2020-03-19 14:08:09
    无论你是Java、PHP开发者,还是运维人员,只要从事互联网行业,面试时都可能被问到HTTP协议相关知识。
  • HTTP与HTTPS的区别

    万次阅读 多人点赞 2020-03-22 00:00:29
    面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!
  • HTTP1.0和HTTP1.1和HTTP2.0的区别

    万次阅读 多人点赞 2019-07-30 23:18:58
    HTTP1.0和HTTP1.1和HTTP2.0的区别 1 HTTP1.0和HTTP1.1的区别 1.1 长连接(Persistent Connection) HTTP1.1支持长连接和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的...
  • HTTP工作流程

    万次阅读 2019-10-28 16:47:57
    什么是HTTP事务2. 报文流3. 请求报文4. 响应报文5. HTTP的工作流程6. 域名解析过程:7. TCP三次握手过程8. HTTP协议栈中各层数据流 1. 什么是HTTP事务 HTTP事务 = 请求命令 + 响应结果 是HTTP请求的最小处理单元...
  • HTTP详解

    万次阅读 2021-08-12 16:19:46
    HTTP 详解 目录HTTP 详解前言二、使用步骤1.引入库2.读入数据总结 前言 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准...
  • HTTP 结构详解

    万次阅读 2020-09-18 11:42:22
    HTTP-报文结构 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。 默认HTTP的端口号为80,HTTPS的端口号为443。 HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。 ...
  • HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

    万次阅读 多人点赞 2017-02-11 13:48:07
    HTTP1.0 HTTP 1.1主要区别 长连接HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次...
  • httppost和httpget需要的jar包

    千次下载 热门讨论 2013-12-06 10:53:55
    httppost和httpget需要的jar包
  • HTTP请求的完全过程

    万次阅读 多人点赞 2019-05-27 11:22:45
    HTTP请求的完全过程 1.1 浏览器根据域名解析IP地址 浏览器根据访问的域名找到其IP地址。DNS查找过程如下: 浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存)...
  • HTTP1.0、HTTP2.0、HTTP 3.0及HTTPS简要介绍

    万次阅读 多人点赞 2020-05-11 22:19:45
    HTTP1.0、HTTP2.0、HTTP 3.0及HTTPS简要介绍 1 HTTP1.0及HTTPS HTTP 建立之初,是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。但随着CSS,Javascript的出现,以及移动互联时代的到来,我们不得...
  • 今天做前后端分离的项目时, 前端向后台发送请求发现报错: Access to XMLHttpRequest at ‘http://localhost:8082/doLogin’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to ...
  • 图解springboot后端发送HttpGet和HttpPost请求 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 代码案例地址:
  • Luat 功能开发教程(二) HTTP 应用

    万次阅读 2021-06-23 19:44:42
    目录http简介API说明实现流程示例执行HTTP请求的回调函数HTTP请求函数常见问题是否支持HTTPS为什么频繁请求会失败为什么POST JSON格式的数据会出现失败数据接收缓存问题相关资料以及购买链接 http 简介 HTTP是Hyper ...
  • 网络协议 -- HTTP协议

    万次阅读 多人点赞 2018-03-09 13:46:25
    一、HTTP协议介绍 1.1 什么是HTTP HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的传输层。 HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW...
  • 现在想想无论分享什么内容都需要慢慢积累, 所以还是决定将之前整理的相关内容验证之后慢慢分享给大家 这个专题就是 HTTP协议原理与实践代码 相关的内容; 不积跬步,无以至千里, 戒焦戒躁 。 好了废话不多说, 直接上...
  • HTTP协议原理详解

    万次阅读 2021-04-01 21:33:30
    文章目录TCP协议与HTTP协议TCP 和HTTP的渊源HTTP 的版本HTTP/0.9HTTP/1.0HTTP/1.1HTTP/2.0HTTP/1.1相较于 HTTP/1.0 协议的区别HTTP1.0运行方式HTTP1.1运行方式HTTP/2.0 与HTTP/1.1 的区别区别:HTTP/2为什么是二进制...
  • o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang.IllegalArgumentException: In...
  • HttpStatus状态详解,HttpStatus.OK,HttpStatus.BADREQUEST,HttpStatus.FORBIDDEN,HttpStatus.NOTFOUND等区别 HttpStatus状态码详解
  • HTTP1.0与HTTP1.1区别

    万次阅读 2019-06-04 09:38:26
    HTTP/1,0时期,每次HTTP请求都会创建一个新的TCP连接,请求完成之后这个TCP连接就会关闭。这种通信模式的效率不高,所以在HTTP/1.1中,引用了HTTP长连接的概念,使用长连接的HTTP协议,会在响应头加入Connection:...
  • HTTP和HTTPS协议

    万次阅读 2019-10-15 00:10:52
    今天让我们一起研究一下HTTP和HTTPS这两种常用的协议。 HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以...
  • 一般来说,C++的项目多是偏底层,不怎么需要跟http打交道,但有时候又需要在C++后端项目中加入一些简单 http以及websocket接口,比如游戏运营服务器,金融交易监控服务等。 但是传统的实现方法比如采用libcurl,...
  • http 和 https

    万次阅读 2020-05-17 17:17:37
    网站的url会分为2部分,通信协议和域名协议 ...https时http+SSL/TCP的简称,SSL基于http之下TCP之上的一个协议层,是基于http标准并对TCP传输数据时进行加密 TLS是更为安全的升级版SSL 参考 https://baijiaha
  • HTTP1.0、HTTP1.1、HTTP2.0的关系和区别

    万次阅读 多人点赞 2018-07-22 17:15:50
    HTTP1.0 无状态、无连接 HTTP1.1 持久连接 请求管道化 增加缓存处理(新的字段如cache-control) 增加Host字段、支持断点传输等(把文件分成几部分) HTTP2.0 二进制...
  • HTTP 简介

    万次阅读 2019-09-20 15:59:33
    浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。 Web服务器根据接收到的请求后,向客户端发送响应信息。 HTTP...
  • SpringBoot发送Http请求-RestTemplate

    万次阅读 多人点赞 2020-05-14 12:05:41
    SpringBoot发送Http请求 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 大数据代码案例地址: https://github.com/Mydreamandreality/sparkResearch...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,115,396
精华内容 4,846,158
关键字:

http