关于HTTP协议的那些东西!

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或者其他端口。

     

作用:


       它能够使浏览器和客户端浏览器之间更加高效的传输数据,它不仅保证计算机正确快速的传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先展示(如文本先于图像)等。


特点:

       基于请求-响应模型,先有请求后有响应,如图:


关于HTTP协议的那些东西!



4

HTTP的请求

    

    HTTP请求协议包括:请求行,请求头,请求体


    HTTP响应协议包括:响应行,响应头,响应体


那么什么是HTTP请求呢?


       当客户端连接上服务器后,向服务器请求某个web资源时,称之为客户端向服务器发送了一个http请求。


       请求包括一个请求行、若干个请求头、以及请求体内容,请求头和请求体内容之间要用空行隔开。


格式如下图(图来自网络,侵权必删):、


关于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请求有几个特点


  1. get请求查询的参数是可以在浏览器的地址栏中查看到的
  2. 请求的数据会附带在url之后,以?分割URL和传输数据,多个参数之间用&连接
  3. 例如:GET /get.html?name=jap&password=123 HTTP/1.1


   2.POST请求:向指定资源提交数据进行处理请求(例如注册登录或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改


   POST的特点:


  1.    post请求的数据会放置在HTTP请求体中
  2.    例如: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>
省略...

关于HTTP协议的那些东西!

上一篇:那些你曾错过的JAVA题(二)


下一篇:那些你曾错过的Java题(一)