码迷,mamicode.com
首页 > Web开发 > 详细

HTTP协议介绍

时间:2016-05-06 12:48:46      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

HTTP 简介
    HTTP 是Hypertext Transfer Protocol(超文本传输协议)的简称。它用来在Internet上传递Web 页面信息。HTTP 位于TCP/IP 协议栈的应用层。传输层采用面向连接的TCP。

    目前,设备支持的 HTTP 协议版本为HTTP/1.0。

URI和URL
URI   Uniform Resource Identifier 统一资源标识符
URL  Uniform Resource Locator 统一资源定位符

一个HTTP请求的详细过程
1.域名解析
   通过浏览器访问网站一般都是填写URL,通过socket发送请求,socket是通过IP和端口号建立连接的,所以,第一步工作就是把URL所述的域名通过DNS解析成IP地址。通常,DNS解析成功后会有缓存机制,DNS的解析首先是从缓存的查找开始,如果缓存不存在,才真正请求DNS,缓存查找流程如下:
  • 浏览器自身的DNS缓存;
  • OS的缓存(windows的命令ipconfig /displaydns);
  • Host文件(C:\Windows\System32\drivers\etc);
  • DNS系统调用,向本地配置的首选DNS服务器发起DNS请求(一般是运营商提供);
  • 运营商DNS代理查找缓存;
  • 迭代DNS请求,一直到域名注册商提供的地址;
2.HTTP请求
    HTTP通过tcp协议传输,三次握手成功后,浏览器向服务器发送GET/POST命令,GET的命令格式:GET 路径/文件名 HTTP/1.0,访问www.baidu.com的GET请求如下:
技术分享
各头部字段的作用:
  • Accept  就是告诉服务器端,我接受那些MIME类型
  • Accept-Encoding  接收那些压缩方式的文件
  • Accept-Lanague   告诉服务器能够发送哪些语言
  • Connection      告诉服务器支持keep-alive特性
  • Cookie    每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
  • Host    用来标识请求服务器上的那个主机
  • User-Agent  用户代理,一般情况是浏览器,也有其他类型,如:wget curl等    
其中,起始行请求方法包括如下几种:
  • GET: 完整请求一个资源 (常用)
  • HEAD: 仅请求响应首部
  • POST:提交表单  (常用)
  • PUT: (webdav) 上传文件(但是浏览器不支持该方法)
  • DELETE:(webdav) 删除
  • OPTIONS:返回请求的资源所支持的方法的方法
  • TRACE: 追求一个资源请求中间所经过的代理(该方法不能由浏览器发出)
HTTP响应
技术分享
头部各字段作用:
应答头
说明
Content-Encoding 文 档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的 下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept- Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
Content-Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentTyep。 
Date 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。
Expires 应该在什么时候认为文档已经过期,从而不再缓存它?
Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。
Server 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。
Transfer-Encoding: chunked 表示输出的内容长度不能确定,Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的Chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)
Vary: Accept-Encoding 告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题
Cache-control 用于控制HTTP缓存,max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应
X-Cache 表示http request是由proxy server回的

浏览器解析HTML
浏览器拿到html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样)
技术分享
浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件。
 HTTPS协议
HTTPS是HTTP的安全版,S实际上是SSL协议。SSL(Secure Sockets Layer 安全套接层)及其继任者TLS(Transport Layer Security)是为网络通信提供安全数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
SSL连接过程
技术分享
抓包分析
1. client发送client hello
SSL客户端通过Client Hello消息将它支持的SSL版本、加密算法、密钥交换算法、MAC算法等信息发送给SSL服务器;
技术分享
2. server回应ServerHello
 SSL服务器确定本次通信采用的SSL版本和加密套件,并通过Server Hello消息通知给SSL客户端。如果SSL服务器允许SSL客户端在以后的通信中重用本次会话,则SSL服务器会为本次会话分配会话ID,并通过Server Hello消息发送给SSL客户端;
技术分享
3. server回应Certificate
 SSL服务器将携带自己公钥信息的数字证书通过Certificate消息发送给SSL客户端;
4.server回应ServerHelloDone
 SSL服务器发送Server Hello Done消息,通知SSL客户端版本和加密套件协商结束,开始进行密钥交换;
技术分享
5.Client发送ClientKeyExchange
SSL客户端验证SSL服务器的证书合法后,利用证书中的公钥加密SSL客户端随机生成的premaster secret,并通过Client Key Exchange消息发送给SSL服务器;
6.Client发送ChangeCipherSpec
SSL客户端发送Change Cipher Spec消息,通知SSL服务器后续报文将采用协商好的密钥和加密套件进行加密和MAC计算;
7.Client发送Finished
SSL客户端计算已交互的握手消息(除Change Cipher Spec消息外所有已交互的消息)的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL服务器。SSL服务器利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功;
技术分享
8.Server发送ChangeCipherSpec
同样地,SSL服务器发送Change Cipher Spec消息,通知SSL客户端后续报文将采用协商好的密钥和加密套件进行加密和MAC计算;
9.Server发送Finishd
SSL服务器计算已交互的握手消息的Hash值,利用协商好的密钥和加密套件处理Hash值(计算并添加MAC值、加密等),并通过Finished消息发送给SSL客户端。SSL客户端利用同样的方法计算已交互的握手消息的Hash值,并与Finished消息的解密结果比较,如果二者相同,且MAC值验证成功,则证明密钥和加密套件协商成功;
技术分享
SSL客户端接收到SSL服务器发送的Finished消息后,如果解密成功,则可以判断SSL服务器是数字证书的拥有者,即SSL服务器身份验证成功,因为只有拥有私钥的SSL服务器才能从Client Key Exchange消息中解密得到premaster secret,从而间接地实现了SSL客户端对SSL服务器的身份验证;
10.应用数据加密传送

HTTP协议介绍

标签:

原文地址:http://blog.csdn.net/qq_30144577/article/details/50637025

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!