1
web服务器和URL
我们首先来讲讲web服务器,Web服务器是指能够为发出请求的浏览器提供文档的程序。服务器是一种被动的程序,只有当我们从浏览器发出请求时才会响应。我们所说的写网站,到最后我们是需要把我们所写的代码部署到web服务器上,这样就可以让全世界的人都能够去访问你的网站,你那里面放置的所有的数据、资源,大家都可以下载。目前最主流的三个Web服务器是Apache,Nginx,IIS。
然后一个就是我们的URL,例如:“http://www.baidu.com” 这就是一个url,它包含些什么呢?
-
协议:包括http,https等
-
域名或者ip地址:www.baidu.com这个就是域名,116.211.94.1这个就是ip地址。
-
端口号:这里可能没有体现出来,80是我们常用的端口号,程序必须使用端口号才能够让另一台计算机访问。
2
什么是HTTP?为什么要学它?
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
其实就是我们服务器和客户端浏览器传输数据时的一种协议,你可以把它理解为计算机世界里面的一种规则,我们必须去遵守它。
我们为什么要去学习它呢?这就有点废话了,我们遵守规则的前提是我们得了解这个规则,并且HTTP是Javaweb开发的基础,每一个请求和响应都是web开发最基本的操作,当我们学习web开发的时候,不去学http协议,我们会“打拳不练功,到老一场空”,当我们在web开发懵B的时候还不如好好的去学习http协议,不然花费在懵逼路上的时间比学http协议多得多。
3
HTTP的原理、作用、特点
原理:
-
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
-
Web服务器根据接收到的请求后,向客户端发送响应信息。
-
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
作用:
它能够使浏览器和客户端浏览器之间更加高效的传输数据,它不仅保证计算机正确快速的传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先展示(如文本先于图像)等。
特点:
基于请求-响应模型,先有请求后有响应,如图:
4
HTTP的请求
HTTP请求协议包括:请求行,请求头,请求体
HTTP响应协议包括:响应行,响应头,响应体
那么什么是HTTP请求呢?
当客户端连接上服务器后,向服务器请求某个web资源时,称之为客户端向服务器发送了一个http请求。
请求包括一个请求行、若干个请求头、以及请求体内容,请求头和请求体内容之间要用空行隔开。
格式如下图(图来自网络,侵权必删):、
例如下面就是一个get请求:
GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept-Language: en, mi
5
HTTP请求方式有哪几种?
在开发中常见的请求方式有POST,GET,DELETE,PUT,我们主要讲一讲GET和POST。
1.GET请求:向服务器特定的资源发出查询请求,一般是用于查询数据或者资源的请求中。
GET请求有几个特点:
- get请求查询的参数是可以在浏览器的地址栏中查看到的
- 请求的数据会附带在url之后,以?分割URL和传输数据,多个参数之间用&连接
- 例如:GET /get.html?name=jap&password=123 HTTP/1.1
2.POST请求:向指定资源提交数据进行处理请求(例如注册登录或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
POST的特点:
- post请求的数据会放置在HTTP请求体中
- 例如:POST /post.html HTTP/1.1
数据 name=jap&password=123放在请求中了
3.两者的区别:在HTTP规范中,没有对URL的长度和传输的数据大小进行大小的限制,但是在实际的开发中,对于GET请求,特定的浏览器和服务器对URL的长度有限制。因此在使用GET请求时,会受到长度的限制
6
什么是请求头,请求体?
请求头用于描述客户端请求哪台主机,以及客户端的一些基本环境信息等,请求头是以键值对的方式来传递数据
如下面:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*;q=0.8 Accept-Encoding:gzip, deflate, br Accept-Language:zh-CN,zh;q=0.9 Cache-Control:max-age=0 Connection:keep-alive Cookie:BIDUPSID=9D9C53E416CD7FF75D06ECDD54E96CBB; PSTM=1543042511; BD_UPN=12314753; __cfduid=d7051da25724d1e9caf4c4f142767136e1547043423; MCITY=-43%3A; ispeed_lsm=0; Host:www.baidu.com Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
请求体代表着浏览器在post请求方式中传递给服务器的参数,请求体中的每一个数据都是采用键值对的形式,多个参数用&连接,另外服务器在接收到请求体后会单独对其解析。
7
HTTP的响应
一个HTTP响应代表服务器向客户端回送的数据,它包括一个响应行,若干个响应头,以及响应体,其中的一些响应头和响应体都是可选的,响应头和响应体内容之间需要用空行隔开。
响应头用于描述服务器的基本信息,以及数据的描述,通过这些数据的描述,可以通知客户端怎么处理它待会回送的数据
例如下面就是一个响应头:
HTTP/1.1 200 OK Date: Mon, 27 Jul 2019 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain
响应行中包含了HTTP协议的版本,以及用于描述服务器对请求的处理结果
例如 HTTP/1.1 200 OK
协议/版本 状态码 状态码描述
这里来补充一下状态码:它是服务器和浏览器之间确定状态的固定数字(200:请求成功,302:请求重定向,404:请求资源不存在,500:服务器内部发生错误)
响应体代表着服务器向客户端浏览器回送的正文
例如:
<!DOCTYPE html> <!--STATUS OK--> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <meta content="always" name="referrer"> <meta name="theme-color" content="#2932e1"> <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /> <link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg"> <link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="百度搜索" /> <title>HTTP_百度搜索</title> 省略...