版本

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. 教你如何在 Javascript 文件里使用 .Net MVC Razor 语法

    摘录 文章主要是介绍了通过一个第三方类库RazorJS,实现Javascript 文件里使用 .Net MVC Razor 语法,很巧妙,推荐给大家 相信大家都试过在一个 View 里嵌套使用 jav ...

  2. python之时间处理time模块

    import time import datetime ''' print(time.time()) #返回当前系统时间戳 print(time.ctime()) #返回当前系统时间 print(ti ...

  3. this.$router 和this.$route 的区别

    1. this.$router: 表示全局路由器对象,项目中通过router路由参数注入路由之后,在任何一个页面都可以通过此方法获取到路由器对象,并调用其push(), go()等方法: 2. thi ...

  4. KNN算法python实现小样例

    K近邻算法概述优点:精度高.对异常数据不敏感.无数据输入假定缺点:计算复杂度高.空间复杂度高适用数据范围:数值型和标称型工作原理:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签 ...

  5. 图文详解安装PHP运行环境

    一.什么是PHP运行环境 能够理解人与计算机交流时语言软件,通常指解释PHP编程语言的软件. 例如: PHP(代码) 需要PHP超文本预编译器(软件). Java需要JVM虚拟机 二.安装PHP运行环 ...

  6. Python框架之Django学习笔记(十五)

    表单 从Google的简朴的单个搜索框,到常见的Blog评论提交表单,再到复杂的自定义数据输入接口,HTML表单一直是交互性网站的支柱.本次内容将介绍如何用Django对用户通过表单提交的数据进行访问 ...

  7. 45、gridview在改变位置之后无法完整显示的问题记录

    gridview的父布局为layoutFather,gridview id为 layoutGridview layoutFather   高度设置为130dp layoutGridview高度设置为1 ...

  8. 【Add Two Numbers】

    题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...

  9. CSU-1974 神奇药水

    CSU-1974 神奇药水 Description ​ 对于csuxushu来说,能够在CSU(California State University)组织2017年的ACM暑期集训让他感到十分荣幸. ...

  10. CSU-1163 寒衣调

    CSU-1163 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆. 某日两人至奈 ...