HTTP协议学习总结
本文是对HTTP协议详解的学习记录贴,非原创,向原作者致敬!!
正文
HTTP是超文本传输协议,并非某种技术
HTTP的网络传输实现依靠的是TCP协议
MIME类型有上千种,是一种文本标记,用
对象类型/子类型
表示:xml文档 .xml text/xml
-
URL是全球唯一定位符,有两种方式
- URL
组成方式:协议://ip地址:端口号(可省略)/资源标识符?参数
举个栗子:https://portal.qiniu.com/bucket/weihao/index- URN
常用来做下拉菜单,不常用
-
HTTP的请求方法 不光有 get和post两种,具体分为以下:
- HEAD 获得服务器头部 不含主体
- GET 从服务器获得文档 不含主体
- POST 向服务器提交数据 包含主体
- PUT 请求存储在服务器 包含主体
- DELETE 从服务器删除文档 不包含主体
- TRACE 从服务器获得报文跟踪 不包含主体
- OPTIONS 决定服务器操作类型 不包含主体
HTTP的工作方式
客户端发送<font color='red' >request</font>请求到<font color='red' face='宋体'>服务端</font>,通报报文方式,服务器端返回结果(json格式或者html标签)给客户端浏览器,浏览器进行解析后展示数据或者<font color='red'>页面元素</font>-
HTTP状态码 代表了服务器的返回结果的标识,常用的有以下几个:
- 200 请求成功并返回
- 302 请求被重定向 返回头有location确定重定向地址
- 304 上次请求被缓存,这次直接在缓存中获取 很多<font color ='red'>静态文件</font>会被缓存
如果你不想使用缓存数据,比如很多js或者css被修改了可以使用
ctrl+F5
进行强制刷新浏览器- 400 提交的参数和服务器映射方法接受的参数不一致 (4开头为客户端错误)
- 403 服务器接收到了请求,但是拒绝提供服务
- 404 页面不存在
- 500 服务器处理请求时内部发生了错误
- 503 服务端暂时 不能正确处理,稍后可能会恢复(比如部署IIS,webconfig有问题的时候会报)
-
HTTP报文(F12后的请求详情页)
按照接收方和发送方可以分为:
- 请求报文
- 相应报文
-
HTTP的报文组成
- 请求行
- 请求头
- 报文体
其中1,2,3组成了请求行,既请求地址,请求方法,和网络协议
4是具体的请求头,里面的内容采用键值对的方式进行表示
![](http://or316jtnw.bkt.clouddn.com//17-8-22/88633249.jpg)
参数是报文体,用来携带请求参数,也可以通过get方式的?后携带
对于HTTP的get请求有个显著的特点就是 body是空的
-
TCP/IP是HTTP的传输依赖.HTTP处于TCP/IP的应用层范围
TCP/IP的层分类- 网络接口层
- 网络层
- 传输层
- 应用层
TCP的补充说明:
HTTP
位于TCP的上层,TCP
其实也位于IP
的上层.
HTTP协议发送报文前需要 建立TCP/IP连接,其中IP地址类似于小区地址,而端口号相当于门牌号,两者确定唯一的网络地址
HTTP代理是位于服务器和客户端中间实体,作为中间人角色转发HTTP请求
对代理服务器的补充: 目前HTTP支持两种发送方式
方式一 服务端和客户端直连
方式二 服务端和客户端无法直接连接,需要通过代理服务器 连接,以突破网络限制
代理服务器的访问不仅可以突破IP网络限制,而且可以提高网速,原理是,当大部分请求url相同时,网络代理服务器一般会做缓存处理
下一次其他用户访问时,缓存会大大提高访问速度代理服务器
也可以隐藏真实IP地址HTTP请求时无状态的.对于来自同一个客户端的两次相同请求,http服务器分辨不出,所以引入了<font color='red'>Cookie(缓存)</font>的概念
一个请求无法返回呈现出的页面,但请求返回的html中有其他引用,比如
jpg
,css
,javascript
等静态文件时,客户端会再次发送请求
-
Request头详细信息:
-
<font color='red'size='4'>cache头域</font>
-
If-Modified-Since
客户端第一次发送请求时会缓存页面到本地文件,并记录文件修改时间,第二次发送时会将该时间作为比对字符串和服务器返回的Last-Modified(最后修改时间)做比较
如果时间相同,则使用本地缓存,如果时间不同,则替换本地文件并保存缓存 -
If-None-Match
该参数在HTTP1.1协议上产生,是为了更精准的细化确定缓存资源,If-Modified-Since因为采用的时间戳,所以精度有限,只精确到秒,所以只适用于不经常变化的静态资源文件. 这个参数需要和response头信息中的`Etag`配合验证,在第一次请求时,服务器会设置Etag,之后用于二次请求时的验证依据
关于该参数的具体使用,请参考REST笔记(五):你应该知道的HTTP头------ETag
-
cache-control
该参数是用来指定response
头的缓存机制![](http://or316jtnw.bkt.clouddn.com//17-8-22/48059186.jpg) 常用的配置是:
Cache-Control:Public
可以被任何缓存所缓存()Cache-Control:Private
内容只缓存到私有缓存中Cache-Control:no-cache
所有内容都不会被缓存 (对于每次返回的数据不同的请求)
-
-
<font color='red'size='4'>cache头域</font>
-
<font color='red'size='4'>Clint头域(浏览器声明部分)</font>
Accept
客户端发送请求时,告诉服务端 接受什么样的返回数据,*/*
代表接受所有类型参数,如果不做特别处理,一般浏览器的Accept接受*/*
(比如AJAX特别指定参数类型)Accept-Language
浏览器声明的自己可以接受的语言类型Accept-Encoding
浏览器声明的可以接受的压缩方式User-Agent
告诉服务器当前客户端的操作系统的版本号,位数及浏览器的相关信息
-
<font color='red'size='4'>Cookie/Login 头域</font>
将cookie值发送给服务器,在header
信息中属于重要的级别 -
<font color='red'size='4'>Entity头域</font>
Content-Type
描述发送或者接受的实体类型Content-Length
描述发送或者接受的实体长度
-
<font color='red'size='4'>Miscellaneous 头域</font>
提供了上下文服务器地址,可以通过Referer
参数查询该链接的产生是通过何种路径引导过来的(上个访问的服务器地址)
-
<font color='red'size='4'>Transport 头域</font>
Host
发送请求时的必备参数之一, 指定了请求资源的internet地址和端口号(端口号可以省略)Connection
指定了获取TCP/IP连接后的处理方式 分为以下两种Connection: keep-alive
完成请求后,TCP/IP连接保持连接,当有新的请求产生时,依然使用该TCP/IP连接Connection: close
当一个请求完成后,立马关掉TCP/IP请求,当有新的请求产生时,会重新进行TCP/IP连接
-
Response头详细信息:
-
<font color='red'size='4'>cache头域</font>
-
Data
生成消息的具体时间和日期
-
Expires
缓存过期时间设置(多用于静态资源)
-
-
<font color='red'size='4'>Cookie/Login头域</font>
-
P3P
作用: 用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题
- Set-Cookie
非常重要的header, 用于把cookie 发送到客户端浏览器, 每一个写入cookie都会生成一个Set-Cookie.
- Set-Cookie
-
-
<font color='red'size='4'>Entity头域</font>
- ETag
详情参考 request头中的If-None-Match
- Last-Modified
详情参考 request头中的'If-Modified-Since' - Content-Type
描述了 服务器返回的实体类型 - Content-Length
描述了实体长度 - Content-Encoding
描述了服务端的压缩方式 - Content-Language
描述了服务端返回的语言类型
- ETag
-
<font color='red'size='4'>Miscellaneous 头域</font>
-
Server:
作用:指明HTTP服务器的软件信息
例如:Server: Microsoft-IIS/7.5 或者 Apache
X-AspNet-Version
如果.net平台开发,会有这个选项,说明了.net的版本号-
X-Powered-By:
说明了服务端采用的后台编程语言类型 ,下图中百度采用的是HPHP
-
-
<font color='red'size='4'>Transport头域</font>
本部分和request对应的该部分内容相同,请翻阅参考<font color='red'size='4'>Location头域</font>
location
用来描述304的具体重定向url地址
- HTTP1.1的默认 TCP连接方式是保持TCP/IP连接,连接时间取决于发布服务器平台(比如APACHE,IIS等的详细设置)
Connection:keep-active
随笔