Network | HTTP protocol
版本
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的更多相关文章
- Simple Network Management Protocol - SNMP Tutorial
30.9 Simple Network Management Protocol Network management protocols specify communication between t ...
- SNMP: Simple? Network Management Protocol(转)
转自:http://www.rane.com/note161.html An SNMP Overview The Message Format The Actual Bytes Introductio ...
- 搭建ntp时间服务器 ntp - (Network Time Protocol)
第1章 ntp 1.1 ntp简介 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调 ...
- NTP(Network Time Protocol)
Linux NTP配置详解 (Network Time Protocol) http://www.ntp.org/ Meinberg NTP packages provide a GUI instal ...
- SNMP–Simple Network Management Protocol
I am planning to write an introduction and simple implementation of SNMP in software, when my work w ...
- 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 ...
- Protocol Framework - SNMP Tutorial
30.4 Protocol Framework TCP/IP network management protocols2 divide the management problem into two ...
- Network - SNMP
Simple Network Management ProtocolWikipediahttps://en.wikipedia.org/wiki/Simple_Network_Management_P ...
- tcp protocol number
在计算机网络OSI模型中,TCP端口完成第四层传输层所指定的功能.我们的电脑与网络连接的许多应用都是通过TCP端口实现的.本文与大家分享部分TCP端口的介绍. 21端口:21端口主要用于FTP(Fil ...
随机推荐
- ipv4配置
- android 极光推送 声音与振动 的关闭和开启
前言:最近刚好在写一些推送方面的东西,又是新手,不断在网上找资料,很少,不过还是找到了一些,反正百度我是再也不想百度了,谷歌一下子就能找到想要的. 废话不多说. 1.主要方法就是如下一个函数 priv ...
- Linuxshell编程
重点回顾: 1.由于核心的内存中是受保护的区块,因此我们必须要透过“shell”将我们输入的指令与Kernel沟通,好让Kernel可以控制硬件来正确无误的工作 2.学习shell的原因主要有:文字接 ...
- vs code 快捷键总结
返回上个光标:alt + ←列编辑模式:shift + alt + 鼠标左键
- Python+Selenium练习篇之2-利用ID定位元素
在前面一篇文章,我们介绍了如何摘取页面字段,通过正则进行匹配符合要求的字段.如果感觉有点困难,不能立马理解,没有关系.把字符串摘取放到第一篇,是因为自动化测试脚本,经常要利用字符串操作,字符串切割,查 ...
- APP网络测试点
- libcmt.lib和msvcrt.lib冲突,原因和解决方法
libcmt.lib和msvcrt.lib冲突,原因和解决方法 https://blog.csdn.net/longlijun/article/details/7331093 libcmt.lib是w ...
- [canvas入坑1]canvas 画布拖拽效果
查看效果请到 http://philippica.github.io/ 点击drag 和上一篇画图很像,所以有些部分做了省略 当鼠标按下时保存当前画布上的内容到ppImgData中,并且记录下初始点 ...
- NOIP2017赛前模拟10月30日总结
题目1: n个人参赛(n<=100000),每个人有一个权值··已知两个人权值绝对值之差小于等于K时,两个人都有可能赢,若大于则权值大的人赢···比赛为淘汰制,进行n-1轮·问最后可能赢的人有多 ...
- BZOJ3612 [Heoi2014]平衡 整数划分
[Heoi2014]平衡 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 348 Solved: 273[Submit][Status][Discus ...