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和HTTPS协议,看一篇就够了

    万次阅读 多人点赞 2019-08-03 11:22:16
    为什么需要但是为什么要讲HTTP和HTTPS呢? 二、HTTP和HTTPS发展历史 当我们打开谷歌浏览器输入www.12306.cn,回车很快在浏览器上就看到页面,其中的浏览器就是客户端,负责接受浏览器的是服务器,两者的通信是...

    一、前言:

    这里写图片描述
    这里写图片描述
    先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init,浏览器显示安全,为什么会这样子呢?2017年1月发布的Chrome 56浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”,若用户使用2017年10月推出的Chrome 62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTP页面都会被标记为“不安全”,此外,苹果公司强制所有iOS App在2017年1月1日前使用HTTPS加密。

    二、HTTP和HTTPS发展历史

    什么是HTTP?

    超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。

    发展历史:

    版本 产生时间 内容 发展现状
    HTTP/0.9 1991年 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 没有作为正式的标准
    HTTP/1.0 1996年 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 正式作为标准
    HTTP/1.1 1997年 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 2015年前使用最广泛
    HTTP/2 2015年 多路复用、服务器推送、头信息压缩、二进制协议等 逐渐覆盖市场

    这里写图片描述
    这个Akamai公司建立的一个官方的演示,使用HTTP/1.1和HTTP/2同时请求379张图片,观察请求的时间,明显看出HTTP/2性能占优势。
    这里写图片描述
    多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。

    HTTP报文格式

    在这里插入图片描述

    什么是HTTPS?

    《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

    PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

    参考连接:

    1.https://kamranahmed.info/blog/2016/08/13/http-in-depth/

    2.https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

    3.https://tools.ietf.org/html/rfc1945

    4.https://http2.github.io/http2-spec/

    5.https://www.zhihu.com/question/34074946

    三、HTTP VS HTTPS

    HTTP特点:
    1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
    2. 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
    3. 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
    4. 简单快速、灵活
    5. 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性

    下面通过一个简单的抓包实验观察使用HTTP请求传输的数据:
    这里写图片描述

    这里写图片描述

    结果分析:HTTP协议传输数据以明文形式显示
    针对无状态的一些解决策略:
    场景:逛电商商场用户需要使用的时间比较长,需要对用户一段时间的HTTP通信状态进行保存,比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。
    1. 通过Cookie/Session技术
    2. HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接

    HTTPS特点:

    基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

    这里写图片描述
    通过抓包可以看到数据不是明文传输,而且HTTPS有如下特点:

    1. 内容加密:采用混合加密技术,中间者无法直接查看明文内容
    2. 验证身份:通过证书认证客户端访问的是自己的服务器
    3. 保护数据完整性:防止传输的内容被中间人冒充或者篡改

    **混合加密:**结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。


    **数字摘要:**通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。


    **数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

    • 收方能够证实发送方的真实身份;
    • 发送方事后不能否认所发送过的报文;
    • 收方或非法者不能伪造、篡改报文。

    内容加密和数据完整性保护

    非对称加密过程需要用到公钥进行加密,那么公钥从何而来?其实公钥就被包含在数字证书中,数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。数字证书被放到服务端,具有服务器身份验证和数据传输加密功能。

    四、HTTP通信传输

    这里写图片描述

    客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。
    这里写图片描述
    报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。

    这里写图片描述

    为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

    比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。

    这里写图片描述

    为什么需要四次挥手呢?TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

    五、HTTPS实现原理

    SSL建立连接过程
    在这里插入图片描述

    1. client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。
    2. server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。
    3. 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。
    4. 客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。
    5. 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
    6. 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
    7. 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。
    8. 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
    9. 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。

    问题:
    1.怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是中间人伪造的公钥呢?

    这里写图片描述
    2.证书如何安全传输,被掉包了怎么办?
    身份认证

    数字证书内容
    包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。

    验证证书安全性过程

    1. 当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要。
    2. 然后证书签名的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。

    那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

    六、运用与总结

    安全性考虑:
    1. HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
    2. SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

    中间人攻击(MITM攻击)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上。

    成本考虑:
    1. SSL证书需要购买申请,功能越强大的证书费用越高
    2. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
    3. 根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。
    4. HTTPS连接缓存不如HTTP高效,流量成本高。
    5. HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
    6. HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。

    最后插播下广告,对IOS感兴趣的或者校招同学可以看这两篇文章-:
    看一篇就够入门Objective-C
    手把手教学IOS自定义cell-仿微信消息列表
    面试必备操作系统

    展开全文
  • 火狐的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 ---

     

    展开全文
  • java后台发起上传文件的post请求(http和https)

    万次阅读 多人点赞 2019-07-31 19:11:04
    一、http post 对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype="multipart/form-data",在写个接收的就可以了,没什么难的。如: <!DOCTYPEhtml> <html>...

    一、http post

    对于文件上传,客户端通常就是页面,在页面里实现上传文件不是什么难事,写个form,加上enctype = "multipart/form-data",在写个接收的就可以了,没什么难的。如:

    1. <!DOCTYPE html>  
    2. <html>  
    3. <head>  
    4. <title>Hello World!</title>  
    5. </head>  
    6. <body>  
    7.     <form method="POST" enctype="multipart/form-data" action="/XXX">   
    8.            <p>文件1:<input type="file" name="file1" /></p>  
    9.            <p>文件:<input type="file" name="file" /></p>  
    10.            <p>其他信息:<input name="luid" /></p>  
    11.            <p><input type="submit" value="上传" /></p>  
    12.     </form>
    13. </body>  
    14. </html>  

     

    如果要用java.net.HttpURLConnection来实现文件上传,还真有点搞头,实现思路和具体步骤就是模拟页面的请求,页面发出的格式如下:

    1. -----------------------------7da2e536604c8  
    2. Content-Disposition: form-data; name="luid"  
    3.   
    4. 123  
    5. -----------------------------7da2e536604c8  
    6. Content-Disposition: form-data; name="file1"; filename="D:\haha.txt"  
    7. Content-Type: text/plain  
    8.   
    9. haha  
    10.   hahaha  
    11. -----------------------------7da2e536604c8  
    12. Content-Disposition: form-data; name="file"; filename="D:\huhu.png"  
    13. Content-Type: application/octet-stream  
    14.   
    15. 这里是图片的二进制数据 
    16. -----------------------------7da2e536604c8--

    上面username是form表单中的文本参数,值为123,file1是form表单中上传的文本文件。file是form表单中上传的其他类型的文件,他们的Content-Type不一样。

    知道了这些,就可以编写代码来模拟了,这里只上传一个文件file,是张图片,附上代码的截图:

     

    以上的空行"\r\n"是比较严格的,要换行或者换两行,都是根据格式来的。

     

    二、https post

    一般都是http的请求,但现在也有越来越多的外部接口采用https的方式来调用。比如这次工作中需要调用的FaceId他们的身份证识别接口,这个接口就是https的,而且传递的参数里还需要身份证照片,这明显是个文件。如下:

     

     

    java后台发起https的文件上传请求的原理以及整个步骤和http的基本一致,只是这次的URLConnection是HttpsURLConnection,而且由于https的请求需要签名等安全认证,所以会在设置HttpsURLConnection时需要多设置两个属性,如下的setSSLSocketFactory()和setHostnameVerifier():

    所需要的TrustAnyTrustManager类和TrustAnyHostnameVerifier类代码如下:

    其他的代码就和HttpURLConnection的一样了。

     

    以上的代码都是使用JDK自带的net工具类,然后模拟页面的form发出的请求来完成的,如果想使用HttpClient来完成发送请求也是可以的,并且更加简单明了,不需要自己写模拟的步骤。因为是第三方工具包,需引入对应jar包:

    <dependency> 

             <groupId>org.apache.httpcomponents</groupId> 

              <artifactId>httpclient</artifactId> 

             <version>4.5.2</version>         

    </dependency> 

    <dependency> 

             <groupId>org.apache.httpcomponents</groupId> 

              <artifactId>httpmime</artifactId> 

             <version>4.5.2</version>         

      </dependency>

    编写的代码如下:

    以上代码都是经过测试的测试代码,你可以自己封装好以供自己今后使用(ps:别想复制,代码都是图片,因为我在沙盒内,代码复制不出来0.0)!

    展开全文
  • 为什么HTTPS比HTTP更安全?

    万次阅读 多人点赞 2019-08-09 14:39:34
    近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的...
  • 最全最常用的RTMP、RTSP、HTTP协议流常用直播流地址

    万次阅读 多人点赞 2018-07-24 17:07:52
    一、RTMP、RTSP、HTTP协议 这三个协议都属于互联网TCP/IP五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用RTMP、RTSP。而点播用HTTP。下面分别介绍下三者的特点。 ...
  • HTTP 和 HTTPS 的区别(面试常考题)

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

    万次阅读 多人点赞 2019-03-27 17:35:08
    面试一年多,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验。请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正规军。 起因 面试官:请问你了解HTTP协议吗? 前端开发...
  • 背景:Jmeter工具使用一段时间后,每次创建脚本都要右键...再来解释http sampler这个采样器,不单可以做http接口请求、还支持web功能请求、webservice的接口测试。所以要先了解所做测试的类型及请求类型: 1、HT...
  • HTTP 结构详解

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

    万次阅读 多人点赞 2018-09-20 15:46:03
    HTTP与HTTPS介绍 HTTPS和HTTP的主要区别 客户端在使用HTTPS方式与Web服务器通信时的步骤 CA证书的申请及其使用过程 HTTPS的缺点 SSL与TLS的区别? SSL/TLS历史 SSL/TLS协议的基本过程 HTTPS涉及的计算环节 ...
  • HTTP协议之multipart/form-data请求分析

    万次阅读 多人点赞 2012-01-06 15:36:34
    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂...根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还...
  • HTTP与HTTPS的区别

    万次阅读 多人点赞 2020-03-22 00:00:29
    面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!
  • java调用HTTP接口(Get请求和Post请求)

    万次阅读 多人点赞 2018-09-14 16:43:27
    一个Http接口:http://172.83.38.209:7001/NSRTRegistration/test/add.do?id=8888888&name=99999999 id和name是传入的参数 浏览器访问接口: java代码调用Http接口代码如下(代码中注释分为两部分:处理get...
  • 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连接是需要经过三次握手的,有一定的开销,如果每次...
  • 网络协议 -- HTTP协议

    万次阅读 多人点赞 2018-03-09 13:46:25
    一、HTTP协议介绍 1.1 什么是HTTP HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议位于TCP/IP协议栈的传输层。 HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即WWW...
  • 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-06-23 12:30:24
    HTTP简介 HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从Web服务器传送到Web...
  • 背景:接着上篇的http sampler的介绍,这篇继续介绍,模版创建测试计划功能。 1、同样的操作步骤,启动JMeter-GUI模式,点击模版,创建Soapwebservice 测试计划: 2、模版测试计划执行结果如下: 3、执行结果断言...
  • 错误: Access to XMLHttpRequest at ‘http://localhost:3000/framework/create’ from origin ‘http://localhost:4200’ has been blocked by CORS policy: Response to preflight request doesn’t pass access ...
  • 图解springboot后端发送HttpGet和HttpPost请求 [提前声明] 文章由作者:张耀峰 结合自己生产中的使用经验整理,最终形成简单易懂的文章 写作不易,转载请注明,谢谢! 代码案例地址:
  • http 和 https

    万次阅读 2020-05-17 17:17:37
    网站的url会分为2部分,通信协议和域名协议 ...https时http+SSL/TCP的简称,SSL基于http之下TCP之上的一个协议层,是基于http标准并对TCP传输数据时进行加密 TLS是更为安全的升级版SSL 参考 https://baijiaha
  • XML Web Service:HTTP-GET, HTTP-POST and SOAP的比较 XML Web Service支持三种协议来与用户交流数据。这三种协议分别是: 1. SOAP:Simple Object Access Protocol 2. HTTP-GET 3. HTTP-POST 1.首先我们先...
  • 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...
  • httppost和httpget需要的jar包

    千次下载 热门讨论 2013-12-06 10:53:55
    httppost和httpget需要的jar包
  • 一般来说,C++的项目多是偏底层,不怎么需要跟http打交道,但有时候又需要在C++后端项目中加入一些简单 http以及websocket接口,比如游戏运营服务器,金融交易监控服务等。 但是传统的实现方法比如采用libcurl,...
  • 不罗嗦了,直接贴代码,不晓得为什么搞这么复杂,是不是因为担心 body 内容一次接受不全,所以搞了个接口来读取其中的内容...func myPost(w http.ResponseWriter, r *http.Request) { s, _ := ioutil.ReadAll(r.Bod...
  • HTTP和HTTPS协议

    万次阅读 2019-10-15 00:10:52
    今天让我们一起研究一下HTTP和HTTPS这两种常用的协议。 HTTP: 是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以...
  • CondaHTTPError: HTTP 000 CONNECTION FAILED for url

    万次阅读 多人点赞 2017-11-14 13:59:53
    参考链接:conda httperror http none none for url none Anaconda更新失败$ conda create -n tensorflow python=3.5Fetching package metadata ....... CondaHTTPError: HTTP 000 CONNECTION FAILED
  • RPC服务和HTTP服务对比

    万次阅读 多人点赞 2017-11-28 10:03:55
    很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单地介绍一下两种形式的C/S架构,先说...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,609,370
精华内容 1,843,748
关键字:

http