http的简单学习

作者: 星期六1111 | 来源:发表于2016-10-16 22:28 被阅读66次

今天中午学习了下http,之前没有系统性的学过,只知道它是超文本传输协议,但对其的一些基本知识还是感觉还是很陌生的。当我中午看见http这个词的时候,首先就想到的一个问题的就是,这是个协议是用来做什么的?
带着这个问题,我们查找了资料,http设计之初是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。现在http的作用已不局限于HTML的传输,图片文件,查询结果等数据也是可以传输的。它的通信过程是这样的:

http协议通信图

那么,问题来了,我在web 浏览器中输入了网址之后到底发生了什么?它是如何到server的?server又是如何响应浏览器的请求的?我们来探究下这个过程。

一.http的请求响应流程

我们先输入网址以www.google.com为例,浏览器将显示google的首页。在这个过程中,通过Network的记录,我们就可以知道。在Network中,定位到第一条记录,点击,右侧将显示Request Headers,我们就可以看到浏览器发给google服务器的请求:

http发送图
scheme:指定低层使用的协议(例如:http, https, ftp)
host:HTTP服务器的IP地址或者域名
port#:HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.mywebsite.com:8080/
path:访问资源的路径
Accept:我能接受这些类型的文件
User-Agent: 我使用的是何种操作系统上的哪个类型那个版本的浏览器
Accept-Encoding:承认接受何种方式的压缩文件
Cookie:发送存储在本机的cookies信息给服务器

服务器又返回给浏览器了什么内容?

服务器返回的头部信息
200:表示一个响应的状态码
Content-Type:指示响应的内容,这里是text/html,表示HTML网页。

_ 请注意_:浏览器就是依靠Content-Type来判断响应的内容是网页还是图片,是视频还是音乐。浏览器并不靠URL来判断响应的内容,所以,即使URL是这样的,如: http://example.com/abc.jpg, 它也不一定就是图片。

服务器响应的内容信息

所以,我们总结http的请求流程如下:

1.浏览器首先向服务器发送HTTP请求,请求包括:
  • 方法:GET还是POST,GET仅请求资源,POST会附带用户数据;
  • 路径:/full/url/path;
  • 域名:由Host头指定:Host: www.google.com.cn
    以及其他相关的Header;

如果是POST,那么请求还包括一个Body,包含用户数据。

2.服务器向浏览器返回HTTP响应,
  • 响应代码:如200。
  • 响应类型:由Content-Type指定;
  • 以及其他相关的Header;

通常服务器的HTTP响应会携带内容,也就是有一个Body,包含响应的内容,网页的HTML源码就在Body中。

3.如果浏览器还需要继续向服务器请求其他资源,比如图片,就再次发出HTTP请求,重复步骤1、2。

搞清楚了http数据传输的相关流程,接下来我们看下和http相关的基本概念:

二.http的特点:

1.无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

2.媒体独立

这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型

3.无状态

指的是协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

换而言之:无状态也就是说在同一个连接中,两个成功执行的请求之间是没有关系的。这就带来了一个问题,用户没办法在一个网站进行连续的交互,比如在一个电商网站里,用户把某个商品加入了购物车中,换了一个页面后再次添加商品,两次添加商品的请求没有联系,浏览器无法知道最终用户都选择了哪些商品。两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

三.http的消息结构

1.客户端请求消息:三部分

第一部分叫Request line(请求行), 第二部分叫http header,第三部分是body。
(1)请求行:包括http请求的种类,请求资源的路径,http协议版本;
(2)http header:http头部信息;
(3)body:发送给服务器的query信息 当使用的是"GET" 方法的时候,body是为空的(GET只能读取服务器上的信息,post能写入)

请求报文格式
在上图中,我们看见了URL ,那么问题问题来了,URL 该如何理解?
URL:
(1) 概念:URL—Uniform Resource Location统一资源定位符,说白了就是我们常说的“网址”
(2) 组成:Protocol(协议)+Host(主机)+Port(端口)+Query
示例URL:
http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

Schema: http
host: www.mywebsite.com
path: /sj/test
URL params: id=8079
Query String: name=sviergn&x=true
Anchor: stuff
2.服务端响应消息

也分为三部分,第一部分叫request line, 第二部分叫request header,第三部分是body。
(1)request line:协议版本、状态码、message
(2)request header:request头信息
(3)body:返回的请求资源主体


http响应结构图

四.HTTP请求方法

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST,上面我们探究的过程中method告诉我们用到的是GET方法。

 GET - 从指定的资源请求数据。
 POST - 向指定的资源提交要被处理的数据

其他的方法如下图:

http的部分方法

既然说道了get和post,那么常见的问题就来了,get和post 的区别是什么?在这里,我总结了一下它们的区别:

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上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

接下来是什么问题呢?在上面我们看见如浏览器若请求后,则返回了一个状态码200,那么200有何含义,还有其他的状态码?

五.状态码

状态码由三位数字组成,第一个数字定义了响应的类别

1XX     提示信息 - 表示请求已被成功接收,继续处理
2XX     成功 - 表示请求已被成功接收,理解,接受
3XX     重定向 - 要完成请求必须进行更进一步的处理
4XX     客户端错误 - 请求有语法错误或请求无法实现
5XX     服务器端错误 - 服务器未能实现合法的请求

常见的状态码,如下:

  • 200 OK 请求被成功地完成,所请求的资源发送回客户端
  • 302 Found 重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request
  • 304 Not Modified 文档已经被缓存,直接从缓存调用
  • 400 Bad Request 客户端请求与语法错误,不能被服务器所理解
  • 403 Forbidden 服务器收到请求,但是拒绝提供服务
  • 404 Not Found 请求资源不存在
  • 500 Internal Server Error 服务器发生了不可预期的错误
  • 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

最后一个问题就是,就是网页中存在的Content-Type了。

六.Content-Type

内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

若想了解详细的HTTP content-type ,请戳这个菜鸟网址

参考网址:
1.https://www.zybuluo.com/yangfch3/note/167490
2.https://www.zybuluo.com/yangfch3/note/113028
3.http://www.runoob.com/http/http-tutorial.html
4.http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

相关文章

  • http的简单学习

    今天中午学习了下http,之前没有系统性的学过,只知道它是超文本传输协议,但对其的一些基本知识还是感觉还是很陌生的...

  • 简单学习http

    1.什么是http 超文本传输协议,是因特网上应用最为广泛的一种网络传输协议,所有www文件遵守这个标准。web数...

  • HTTP:简单的学习笔记

    作为一个开发人员,如果您经常跟客户端、服务器打交道,肯定要懂点HTTP协议内容,对于开发调试至关重要。 HTTP协...

  • 简单的HTTP协议学习

    1 2. 详细解析

  • HTTP简单学习笔记

    HTTP:超文本传输协议 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联...

  • 学习之路-http简单总结

    web内容都是存储在web服务器上的,其所使用的是http协议,因此常被称为http服务器。客户端想服务器发送ht...

  • 《图解HTTP》学习笔记(二):简单的HTTP协议

    HTTP协议是用于客户端和服务端之间的通信 请求访问文本或图像等资源的一端称作为客户端,而提供资源的一端称作为服务...

  • 《HTTP小书》刘传君PDF+mobi

    本书特色 直接干脆的HTTP教程,还原本来简单的HTTP给你!页数不多,但是对于想要学习web而来学习HTTP协议...

  • http与https简单学习记录

    本文分为以下4个部分 1.密码学相关概念 2.http 3.SSL/TLS 4.https 1.密码学概念 要想区...

  • Retrofit学习(一)集成-简单get请求

    Retrofit学习(一)集成-简单get请求 Retrofit学习(一)-集成http://www.jiansh...

网友评论

  • 6d96978eeefb:文章写的不错,但是排版有点问题。我感觉你对于列表的使用不正确,或者说你文章里的一些标题并不是用的提供的列表符号,所以它的缩进和周围的空白感觉特别不明显,读起来挺累的。
    星期六1111: @nowind 好的,谢谢老师,我修改一下

本文标题:http的简单学习

本文链接:https://www.haomeiwen.com/subject/xycayttx.html