HTTP基本知识

来源:互联网 发布:王亚林扈华国现状知乎 编辑:程序博客网 时间:2024/05/19 02:39
1HTTP简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

2.在TCP/IP协议簇中的位置
通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

3.主要特点:简单快速,灵活,无连接,无状态,支持B/S,C/S

4.请求消息Request
由四部分组成:请求行,请求头部,空行,请求数据

GET请求具体案例(由谷歌开发者工具抓包):
GET / HTTP/1.1Host: www.jd.comConnection: keep-aliveCache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: __jdv=122270672|direct|-|none|-|1486874586483; o2-webp=true; __jda=122270672.1657406455.1482478733568.1486874586.1486878100.3; __jdb=122270672.2.1657406455|3.1486878100; __jdc=122270672; __jdu=1657406455; user-key=41c07e76-ea3a-443e-b550-c467671649b2; cn=0

第一部分:请求行
GET //请求类型
/ //要访问的资源,此处为默认资源
HTTP/1.1 //协议类型及版本号
第二部分: 请求头部
Host: www.jd.com //HOST指出请求的目的地
Connection: keep-alive //持续连接(1.0中没有规定,1.1默认所有都是)
Cache-Control: max-age=0 //如果为no-cache ,强制每次请求直接发送给源服务器
// 如果max-age>0 时 直接从游览器缓存中 提取 
//max-age<=0 时 向server 发送http 请求确认 ,该资源是否有
//修改 有的话 返回200 ,无的话 返回304. 
Accept: text/html... //浏览器支持的 MIME 类型分别是 优先级从左到右递减
Upgrade-Insecure-Requests: 1 //升级不安全要求
User-Agent: Mozilla/5.0... //用户代理,识别客户端操作系统及版本,cup类型,浏览器信息
Accept-Encoding: gzip... //表示浏览器有能力解码的编码类型
Accept-Language: zh-CN... //表示浏览器所支持的语言类型
Cookie: __jdv=12227... //cookie信息

5.响应消息Response
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

响应消息案例:
HTTP/1.1 200 OK
Server: jdws //指明HTTP服务器的软件信息
Date: Sun, 12 Feb 2017 05:42:28 GMT //生成消息的具体时间和日期,即当前的GMT时间。
Content-Type: text/html; charset=utf-8
Content-Length: 25314 //指明实体正文的长度,以字节方式存储的十进制数字来表示。
Connection: keep-alive
Vary: Accept-Encoding
Expires: Sun, 12 Feb 2017 05:42:17 GMT//浏览器会在指定过期时间内使用本地缓存
Cache-Control: max-age=30
Content-Encoding: gzip
ser: 130.23
Via: BJ-M-YZ-NX-76(HIT), http/1.1 CD-CT-1-JCS-102 ( [cHs f ])
Age: 21
Strict-Transport-Security: max-age=360

<!DOCTYPE html>
<html>
...
</html>
第一部分:状态行:协议及版本号,状态码,状态消息三部分组成
第二部分:消息报头,说明客户端要使用的一些附加信息
第三部分:空行
第四部分:响应正文

6.状态码
 状态代码由 3 位数字组成, 表示请求是否被理解或被满足。
1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码及说明:
200 OK //客户端请求成功

303:重定向,即从原url重定向到新的url。 例如php 的hear函数header("localtion:/index.php")

400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务,一般是服务器路径没有权限或者是其他权限相关问题
404 Not Found //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误:一般来说,这个问题都会在服务器端的源代码出现错误时出现,比如出现死循环。
502 Bad Gateway//作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。比如LNMP ,php-fpm没有启动就会报502错误。
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常,比如Java 容器部署war的时候,就出现503
504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应,比如nginx和php-fpm, php设置sleep(200),就会收到504 Gateway Time-out。注意:某些代理服务器在DNS查询超时时会返回400或者500错误

7.请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 请求指定的页面信息,并返回实体主体。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请
求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。

8.HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是 HTTP 请求/响应的步骤:

1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。

2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;  

9.get与post的区别
  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
  3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

10.浏览器缓存
浏览器缓存:包括页面html缓存和图片js,css等资源的缓存。如下图,浏览器缓存是基于把页面信息保存到用户本地电脑硬盘里。
        

缓存的优点:
     1)服务器响应更快:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让服务器看上去响应更快。
     2)减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。
缓存工作原理
       页面缓存状态是由http header决定的,一个浏览器请求信息,一个是服务器响应信息。主要包括Pragma: no-cache、Cache-Control、 Expires、 Last-Modified、If-Modified-Since。其中Pragma: no-cache由HTTP/1.0规定,Cache-Control由HTTP/1.1规定。
       工作原理图:
 
从图中我们可以看到原理主要分三步:
  1. 第一次请求:浏览器通过http的header报头,附带Expires,Cache-Control,Last-Modified/Etag向服务器请求,此时服务器记录第一次请求的Last-Modified/Etag                  
  2. 再次请求:当浏览器再次请求的时候,请求头附带Expires,Cache-Control,If-Modified-Since/Etag向服务器请求
  3. 服务器根据第一次记录的Last-Modified/Etag和再次请求的If-Modified-Since/Etag做对比,判断是否需要更新服务器通过这两个头判断本地资源未发生变化,客 户端不需要重新下载,返回304响应。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新浪微博被官方封号怎么办 电磁波辐射重度异常怎么办 卖鞋没有生意怎么办 华为手机越来越卡怎么办 华为手机电越充越少怎么办 土炕有裂缝冒烟怎么办 农村土炕不好烧怎么办 夏天土炕不好烧怎么办 怎么办我是个肚脐控 联想笔记本电池显示损坏怎么办 电脑关机没反应怎么办 变色灯坏了怎么办 衣服颜色太艳怎么办 自行车掉链子怎么办图解 南联邦大学怎么办入学 群租公寓业主怎么办 孩子上课不举手怎么办 门颜色太难看怎么办 玛雅水公园下雨怎么办 鱼竿手把节断怎么办 印度出兵马尔代夫中国怎么办 看见死的黄鼠狼怎么办 养的小猫死了怎么办 黄鼠狼遇到危险该怎么办 黄鼠狼打跑了怎么办 出口退税过期了怎么办? 接收不到验证码怎么办 退税单掉了怎么办 新风机噪音大怎么办 新风系统噪音大怎么办 点球大战平了怎么办 意大利护照被抢怎么办 剑三跑商货物丢了怎么办 eve物品仓库不够怎么办 穿越到二战德国怎么办? 胸罩被染红色怎么办 刘海总是往下掉怎么办 马桶盖老往下掉怎么办 护膝老是往下掉怎么办 避光垫往下掉怎么办 眼镜带上往下掉怎么办