版本

HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。

HTTP/1.1
当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:

  • 缓存处理
  • 带宽优化及网络连接的使用
  • 错误通知的管理
  • 消息在网络中的发送
  • 互联网地址的维护
  • 安全性及完整性

现在在HTTP 1.1使用持续连接,不必为每个web对象创建一个新的连接,一个连接可以传送多个对象。HTTP管道允许客户在上一个回应被收到前发送多重请求从而进一步减少了延迟时间。另一项协议的改进是byte serving(字节服务),允许服务器根据客户的请求仅仅传输资源的一部分。

在HTTP1.0,单一TCP连接内仅执行一个“客户端发送请求—服务器发送应答”周期,之后释放TCP连接。在HTTP1.1优化支持持续活跃连接:客户端连续多次发送请求、接收应答;批量多请求时,同一TCP连接在活跃(Keep-Live)间期内复用,避免重复TCP初始握手活动,减少网络负荷和响应周期。此外支持应答到达前继续发送请求(通常是两个),称为“流线化”(stream)。

状态码

  • 1xx消息Information——请求已被服务器接收,继续处理
  • 2xx成功Success——请求已成功被服务器接收、理解、并接受
  • 3xx重定向Redirection——需要后续操作才能完成这一请求
  • 4xx请求错误Client error——请求含有词法错误或者无法被执行
  • 5xx服务器错误Server error——服务器在处理某个正确请求时发生错误

请求信息

发出的请求信息包括以下几个

请求行A request line
例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
请求头Request Headers
例如Accept-Language: en
空行
其他消息体
请求行和标题必须以<CR><LF>作为结尾。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。

HTTPS

与HTTP的URL由“http://”起始且默认使用端口80不同,HTTPS的URL由“https://”起始且默认使用端口443。

HTTP是不安全的,且攻击者通过监听和中间人攻击等手段,可以获取网站帐户和敏感信息等。HTTPS被设计为可防止前述攻击,并(在没有使用旧版本的SSL时)被认为是安全的。

TTP协议和安全协议同属于应用层(OSI模型的最高层),具体来讲,安全协议工作在HTTP之下,运输层之上:安全协议向运行HTTP的进程提供一个类似于TCP的套接字,供进程向其中注入报文,安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应的进程。严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。

HTTPS报文中的任何东西都被加密,包括所有报头和荷载。除了可能的选择密文攻击之外,一个攻击者所能知道的只有在两者之间有一连接这一事实。

关于安全

HTTP 1.1 一共有 8 种方法(methods):OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。其中我们常用的主要是 GET 和 POST。

这里有两个概念:安全方法(safe methods)以及幂等方法(idempotent methods)。

首先 GET 是「安全」的而 POST 不是。安全方法仅仅获取资源而不进行任何其他操作。然而有些服务生成的动态内容会因 GET 而变,比如在搜索引擎多次访问同一个搜索结果条目可能导致它在后续的搜索中排序提升。但这里的所谓安全是对于请求发起者而言,他并不主动期待这样的变化,而是单纯地获取资源。

而幂等是说,这个方法执行多次和执行一次的效果是一样的。显然 GET 是幂等的,因为除了获取资源什么都不会做;POST 则是像服务器提交数据请求处理,可能导致修改或者创建资源,所以是非幂等的。

所以你要在 GET 和 POST 之间做选择的话,一个简单的方法是,问问自己:这个操作的目的是使得服务器上的资源或数据发生变更吗?是的话,就用 POST 吧;否则就应该是 GET。

好好看看Rest和Restful的概念就能知道get和post的应用场景有什么不同了。
1.get表示请求不会对后台数据库进行任何变更,post则存在持久化操作。
2.get具有幂等性,也就是说在你使用post改变同一数据前,无论用get请求多少次,说得的结果都一样。
3.get“提醒”浏览器对你的http请求及服务器的响应进行缓存。
4.get的数据放在http头中,所以有大小限制,参考stackoverflow,不过浏览器都不一样,没有明显规定。而post的数据放在http包体。
5.至于安全性我觉得get和post仅仅只是是否能从URL看出来的区别而已。真正要安全最好上SSL。

GET 的参数处于query string,而POST的参数处于body,这意味着更多的传输和处理开销(如果不设client_max_body_size,可能还有被DOS的风险)。对于淘宝这样海量请求的服务来说,这点优化是必须的。

方法

OPTIONS: 允许客户端查看服务器的性能。
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
GET: 请求指定的页面信息,并返回实体主体。
HEAD: 只请求页面的首部。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

PATCH:请求修改局部数据

像HEAD、GET、OPTIONS 和 TRACE这几种http方法是被认为是“安全的”, 这意味着它们只会进行获取数据而不会修改服务器的状态, 换句话说,它们不会产生负面影响, 当然除了常见的无害操作,比如记录日志、创建缓存或者创建其他统计信息。
正相反, 像POST、PUT、DELETE 和 PATCH 等方法是有可能产生副作用。网络爬虫等一般不会使用这些方式(笔者注:搜索引擎的暗网抓取可能会使用这些方法)。
尽管GET方法是一般被视为“安全的”,但如果在实际使用中没有做任何设置,比如可以无限制的抓取等情况, 也会导致一些不可预料的问题,比如web缓存或者搜索引擎问题。

Network | HTTP protocol的更多相关文章

  1. Simple Network Management Protocol - SNMP Tutorial

    30.9 Simple Network Management Protocol Network management protocols specify communication between t ...

  2. SNMP: Simple? Network Management Protocol(转)

    转自:http://www.rane.com/note161.html An SNMP Overview The Message Format The Actual Bytes Introductio ...

  3. 搭建ntp时间服务器 ntp - (Network Time Protocol)

    第1章 ntp 1.1 ntp简介        NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调 ...

  4. NTP(Network Time Protocol)

    Linux NTP配置详解 (Network Time Protocol) http://www.ntp.org/ Meinberg NTP packages provide a GUI instal ...

  5. SNMP–Simple Network Management Protocol

    I am planning to write an introduction and simple implementation of SNMP in software, when my work w ...

  6. Frequently-Used Network Time Server(Base On NTP:Network Time Protocol)

    国家授时中心服务器               210.72.145.44 133.100.11.8    日本福冈大学 time-a.nist.gov                   129.6 ...

  7. Protocol Framework - SNMP Tutorial

    30.4 Protocol Framework TCP/IP network management protocols2 divide the management problem into two ...

  8. Network - SNMP

    Simple Network Management ProtocolWikipediahttps://en.wikipedia.org/wiki/Simple_Network_Management_P ...

  9. tcp protocol number

    在计算机网络OSI模型中,TCP端口完成第四层传输层所指定的功能.我们的电脑与网络连接的许多应用都是通过TCP端口实现的.本文与大家分享部分TCP端口的介绍. 21端口:21端口主要用于FTP(Fil ...

随机推荐

  1. Diycode开源项目 UserActivity分析

    1.效果预览 1.1.实际界面预览 1.2. 这是MainActivity中的代码 这里执行了跳转到自己的用户界面的功能. 1.3.点击头像或者用户名跳转到别人的页面 UserActivity的结构由 ...

  2. POJ 3041 Asteroids (二分图最小点覆盖集)

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 24789   Accepted: 13439 Descr ...

  3. tensorboard页面显示No dashboards are active for current data set 问题win10系统

    如果问题如上所示,可以试下如下方法: 在文件夹中找到你的logs文件, 在空白处按住“shift”键,右键鼠标(注意鼠标不要选中任何文件),点击“Powershell”打开win10powershel ...

  4. 洛谷P1079 Vigenère 密码

    题目链接:https://www.luogu.org/problemnew/show/P1079

  5. 我给女朋讲编程网络系列(2)--IIS8 如何在本地发布网站

    通过IIS8 在本地发布网站,一个截图,你就全明白了,越是简单,越是实用. 如果有现成的网站,就将你的网站放到一个文件夹中,比如WebTest2中. 如何没有网站,可以在WebTest2中新建一个in ...

  6. 踩坑 Uncaught RangeError: Maximum call stack size exceeded

    今天遇到了一个错误, 堆栈溢出,很好奇就是一个简单ajax请求怎么会报这个错误,研究了一下,发现犯了一个很低级的错误,data的参数错误了: passWord是未定义的变量,值为空,然后导致了这个问题 ...

  7. 通过TCP实现文件传输

    import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.In ...

  8. java _tomcat_mysql 部署

    项目做完了,要发布了,而Java的特长之一就是移植性好,面对着微软的XP的停止服务,Windows系统的“独裁”,越来越多的商家选择了开源的免费的linux系统作为服务器.因为linux系统也有图形界 ...

  9. Codeforeces 954C Matrix Walk

    题目大意 考虑一个 $x\times y$ 的矩阵 $A_{x\times y}$ ,$A_{i,j} = (i-1)x+y$ . 从矩阵中的某个位置出发,每次可向上下左右移动一步,每到一个位置,记录 ...

  10. drools6

    <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artif ...