计算机网络通信 (二)

一,HTTP协议简介

1.1 HTTP协议介绍

什么是超文本
 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容。
什么是HTTP协议
 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写, HTTP是万维网(WWW:World Wide Web)的数据通信的基础。
 HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP协议特点
支持客户端/服务端模式:
 HTTP协议支持客户端服务端模式,需要使用浏览器作为客户端来访问服务端。
简单快速:
 客户向服务器请求服务时,只需传送请求方法和路径。请求方法常
用的有GET、POST等。每种方法规定了客户与服务器联系的类型不
同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通
信速度很快
灵活:
 HTTP允许传输任意类型的数据对象。正在传输的类型由ContentType(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
无连接:
  每次请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。优点就是节省传输时间,实现简单。我们有时称这种无连接为短连接。对应的就有了长链接,长连接专门解决效率问题。当建立好了一个连接之后,可以多次请求。但是缺点就是容易造成占用资源不释放的问题。当HTTP协议头部中字段Connection:keep-alive表示支持长链接
单向性:
 服务端永远是被动的等待客户端的请求。
无状态:
 HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了解决HTTP协议无状态,于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。

1.2 HTTP协议中URI、URL、URN

URI
URI:(Uniform Resource Identifier),统一资源标识符,是一个
用于标识互联网某个唯一资源的字符串名称。
URL和URN都是URI的子集。
 URI是个纯粹的语法结构,用于指定标识Web资源的字符串的各个不同部分。他不属于定位符,因为根据该标识符无法定位任何资源
URL
 URL(Uniform Resource Location),统一资源定位符,可以帮助我们定位互联网上的某一个唯一资源,相当于是互联网资源的身份证号

URL的五个元素包括在一个简单的地址中:

  • 传送协议。
  • 服务器。(通常为域名或者IP地址)
  • 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
  • 请求资源路径。
  • 传递数据。(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)

举例:

  http://www.baidu.com:80/course/id/18.html?a=3&b=4  

其中

1 http, 是协议;
2 www.itbaizhan.cn,是服务器域名;
3 80,是服务器上的默认网络端口号,默认不显示;
4 /course/id/18.html,是路径(URI:直接定位到对应的资源);
5 ?a=3&b=4,请求时传递的数据;

URN
 URN(Uniform Resource Name,)统一资源名称,其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址。

1.3 HTTP协议中的请求信息

打开一个网页需要浏览器发送很多次Request

  • 当你在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request去获取 http://www.baidu.com 的html. 服务器把Response发送回给浏览器。
  • 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件
  • 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
  • 等所有的文件都下载成功后。 网页就被显示出来了。
    请求状态分析(request)
      Request 消息分为3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是Request body。Request header和Request body之间有个空行。
    请求行
    GET /course/id/18.html?a=3&b=4 HTTP/1.1
    POST /login HTTP/1.1
    请求头
     请求头用于说明是谁或什么在发送请求、请求源于何处,或者客户端的喜好及能力。服务器可以根据请求头部给出的客户端信息,试着为客户端提供更好的响应。请求头中信息的格式为key:value。
  • Host
  • Connection
  • Upgrade-Insecure-Requests
  • Cache-Control
  • User-Agent
  • Accept
  • Accept-Encoding
  • Accept-Language
  • Accept-Charset
  • Referer
  • Cookie

请求体
客户端传递给服务器的数据。比如:表单使用post方式提交的数据、上传的文件数据.等。
请求方式

  • GET
    向指定的资源发出“显示”请求。GET请求中会将请求中传递的数据包含在URL中并在浏览器的地址栏中显示。GET请求传递数据时要求数据必须是字符。GET请求可以被浏览器缓存。
  • POST
    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求传递数据时,数据可以是字符也可以是字节型数据,默认为字符型。POST请求默认情况下不会被浏览器所缓存。
  • HEAD
    向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头度中的元信息。
  • PUT
    向指定资源位置上传其最新内容。
  • DELETE
    请求服务器删除Request-URI所标识的资源。

GET和POST的区别(重要,面试常问)

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会保留。
  5. GET请求在URL中传送的参数是有长度限制的,而POST则没有。对参数的数据类型GET只接受ASCII字符,而POST即可是字符也可是字节。
  6. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  7. GET参数通过URL传递,POST放在Request body中

HTTP协议中的响应信息
 服务端接收到客户端的请求消息,并将处理信息返回给客户端,以次来表示响应。当服务器收到浏览器的请求后,会发送响应消息给浏览器。一个完整的响应消息主要包括响应行、响应头信息和响应体。

响应状态分析(response)
Response消息也由三部分组成:第一部分叫Response line、第二部分叫Response header、第三部分叫Response body。
响应行
响应行: HTTP/1.1 200 OK
响应行中的状态码
在这里插入图片描述
常见状态码及含义
200 - 请求成功,已经正常处理完毕
301 - 请求永久重定向,转移到其它URL
302 - 请求临时重定向
304 - 请求被重定向到客户端本地缓存
400 - 客户端请求存在语法错误
401 - 客户端请求没有经过授权
403 - 客户端的请求被服务器拒绝,一般为客户端没有访问权限
404 - 资源未找到,客户端请求的URL在服务端不存在
500 - 服务端出现异常

响应头
响应头用于告知浏览器当前响应中的详细信息,浏览器通过获取响应头中的信息可以知道应该如何处理响应结果。响应头中信息的格式为key:value。

  • Date
  • Server
  • Vary
  • Content-Encoding
  • Content-Length
  • Content-Type

响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。

1.4 MIME类型

什么是MIME类型
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

MIME类型的作用
HTTP协议所产生的响应中正文部分可以是任意格式的数据,那么如何保证接收方能看得懂发送方发送的正文数据呢?HTTP协议采用MIME协议来规范正文的数据格式。

MIME类型的使用
在服务端我们可以设置响应头中Content-Type的值来指定响应类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值