设为首页 收藏本站
查看: 719|回复: 0

[经验分享] HTTP协议相关内容及web通信原理的理解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-14 09:59:14 | 显示全部楼层 |阅读模式
简介:

HTTP(HyperText Transfer Protocol) 超文本传输协议,是互联网上行应用最广泛的一种网络协议。
HTTP是一个客户端和服务器端请求和应答的标准(TCP),客户端是终端客户,服务器端是网站,通过web浏览器,网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认为80)的HTTP请求,这个请求发起者称之为用户代理(User Agent)。应答的服务器上存储着一些资源,比如html文件或图片,这个服务器称之为源服务器(origin server)。

在用户代理和源服务器之间可能存在多个中间层,比如代理,网关,或者隧道(tunnels),尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没国定必须使用它和基于它支持的层。
HTTP协议可以在任何其他互联网协议上实现。

一、http协议版本:

http 0.9 仅用于传输html文档
http 1.0
MIME: Multipurpose Internet Mail Extensions 引入MIME机制,从而支持多媒体数据
引入keep-alive(持久连接): 必须显式注明使用,才可以启用
缓存机制
http 1.1:
更多请求方法,更加精细缓存控制;持久连接(persistent),原生支持
http 2.0:
spdy  google开发的,还没有成为标准,但是已经有大量的开发簇拥

二、http协议的基本概念:

http事务:
一次请求及对应的响应的整个过程

http方法:
GET:请求获取一个资源,需要服务器发送
HEAD: 跟GET近似, 但其不需要服务响应请求的资源,而返回相应首部
POST基于HTML表单向服务器提交数据,服务器通常需要存储此数据 (位置:通常为关系型数据库)
PUT与GET相反, 向服务器发送资源: 服务器通常需要存储此资源:(位置:通常为文件系统)
DELETE删除URL指向的资源
OPTIONS探测服务器端对请求的URL所支持使用的请求方法
TRACE跟踪一次请求中间所经过的代理服务器、防火墙或网关等

http状态码:
1xx: 信息性状态码

2xx:成功状态码
200: OK
201: CREATED

3xx: 重定向类的状态码,返回一个新地址
301: Moved Permanently永久重定向
302:Found,临时重定向,会在相应报文中使用"Location:新位置";
304:Not Modified, 诶做任何修改

4xx: 客户端类错误
403: Forbidden,请求被拒绝
404:Not Found,服务器找不到请求资源
405: Method Not Allowed, 不允许此方法请求此资源

5xx:服务器类的错误
500: Internal Server Error 服务器内部错误
502: Bad Gateway, 代理服务器从上游服务器收到一条伪响应
503: Service Unavailable,服务暂时不可用



http协议: 协议首部
是在应用层的首部,封装在应用层,在数据前段指定了状态码、指定资源等信息,可以分为以下几类:

1. 通用首部
2. 请求首部
3. 响应首部
4. 实体首部
5. 扩展首部 非标准首部,可由程序员自行创建: X-Forward-For, X-Via

协议首部格式:
Name: Value
Content-Type: image/gif

http请求报文:
<method> <request-URL> <version>
<HEADERS>
           这个空白行是必须存在的
<entity-body>

http响应报文:
<version> <status> <reason-phrase>
<HEADERS>
         这个空白行是必须存在的
<entity-body>

解释:
<method>: 请求方法:
<request-URL>: 请求的资源,可以使相对路径,如/images/log.jpg, 也可是对决路径,
<version>: http协议版本,格式HTTP/<major>.<minor>, 例如 HTTP/1.0, HTTP/1.1
<headers>: 各种所可以使用的首部
<status>:  状态码
<reason-phrase>: 原因短语, 指状态码的易读信息
-
通用首部:
Connection:定义C/S之间关于请求、响应的有关选项
Connection: keep-alive

Cache-Control: 缓存控制


请求首部:
Client-IP:
Host: 请求的主机
Referer: 指明了请求当前资源原始资源的URL(跳转前的页面URL,可以用来防盗链)
User-Agent: 用户代理

Accept首部:
Accept: 服务端能够发送的媒体类型(通知服务端我支持什么)
Accpet-Charset:
Accept-Enconding:
Accpet-Language:

条件式请求:(仅HTTP1.1支持)
跟安全相关请求:
            Authorization:
            Cookie:

响应首部:
Age: 可以缓存的时长
Server: 向客户端说明自己用到的程序名称和版本(nginx/apache?)

协商首部:
vary: 首部列表,服务器会根据列表中的内容挑一个最适用的版本发送给客户端
跟安全相关:
WWW-Authentication:
Set-Cookie

实体首部:
Location: 资源的新位置(302时会用到)
Allow: 允许对此资源适用的请求方法

内容相关的首部:
Content-Enconding: 内容的压缩格式
Content-Language: 内容的编码格式
Content-Length: 本次发送的长度
Content-Location: 内容位置
Content-Type: 内容类型

缓存相关:
Etag
Expires
Last-Modified
二、 web通信原理
一次web资源请求的具体过程(从服务器角度考虑):


wKiom1WjHR_gM5POAAEJEbzIk9E400.jpg

建立连接
接受请求
处理请求
访问资源
构建响应
发送响应
记录日志
-
连接分为:
连接套接字:客户端随机端口 连接 服务器上的随机端口
监听套接字:80端口
-
wKioL1WjIEHyB22dAACWjBiysX8167.jpg
web服务器的I/O结构:

单进程模型:串行;一次只响应一个独立的请求
多进程模型: 每个进程响应一个用户请求,实现并发的效果 eg: apache; 有安全上下文切换,及进程的创建和回收,有大量的内核空间开销
复用的I/O机制:一个进程生成多个线程(线程会共享进程的很多数据,包括打开的文件等),每个线程响应一个用户请求
复用的I/O机制: 多个线程,每个线程同时响应多个用户请求:eg: nginx,



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-86558-1-1.html 上篇帖子: Centos6.4+Python3.4+Django1.8_Developer_environment_create 下篇帖子: 加密/解密&利用OpenSSL构建私有CA 通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表