草庐IT

http协议、URL、GET/POST请求报文及响应报文

learning-striving 2023-04-03 原文

一、http协议概念定义

HTTP (HyperText Transfer Protocol):即超文本传输协议,于1991年由蒂姆·伯纳斯-李设计制作

超文本:是超级文本的缩写,指超越文本限制或超链接,如音乐、图片、视频、超链接等

目的:是用来传输网页数据,现在运行传输任意类型的数据,传输http协议格式的数据是基于TCP传输协议,发送数据前需先建立连接

作用:规定了浏览器和web服务器通信数据的格式,浏览器和web服务器通信需使用http协议

二、浏览器与服务器通信过程

  1. 通过DNS(域名解析服务器)将域名解析为IP地址,浏览器获取到IP地址
  2. 浏览器web服务器程序建立连接
  3. 浏览器根据IP地址及web服务器程序默认80端口号发送http请求数据至web服务器程序
  4. web服务器程序根据请求向服务器主机获取图片、网页、js数据资源
  5. 服务器主机将资源返回给web服务器程序
  6. web服务器程序返回http响应数据至浏览器

三、URL网址概念定义

URL(Uniform Resoure Locator):统一资源定位符,通俗理解就是网络资源的地址,简称网址,通过URL能够找到网络中对应的资源数据

域名:是IP地址的别名,是用点进行分割使用英文字母和数字组成的名字,使用域名目的是为了方便记住主机IP地址

  • URL举例:http://xqnav.top/nav/index.html?page=1&count=5
  • URL组成
    • 协议部分:http://、https://、ftp://
    • 域名部分:xqnav.top
    • 资源路径部分:/nav/index.html
    • 参数部分:?后面的page和count为参数,参数间用&连接

四、查看HTTP协议的通信过程

开发者工具使用:以Google Chrome浏览器为例,Windows和Linux平台按F12, macOS选择 视图 ->开发者 ->开发者工具或直接使用alt+command+i快捷键,另一通用操作是在网页右击选择检查

  • 常用标签选项说明
    • Elements:元素,用于查看或修改HTML标签
    • Console:控制台,执行js代码,显示脚本输出的调试信息
    • Sources:源代码,查看静态资源文件,断点调试js代码
    • Network:网络,查看http协议的通信过程,http请求的详细信息,如请求头、响应头等

  • Headers:http的头信息 
  • Response:http的响应体信息
  • General:主要信息
  • Response Headers:http响应头信息
  • Request Headers:http请求头信息

五、http请求报文方式

  • http请求报文组成:请求行、请求头、空行、和请求体
    • 请求行组成:请求方式、请求资源路径、http协议版本
  • 常见方式
    • GET方式:获取web服务器数据,无请求体
    • POST方式:向web服务器提交数据,请求体可有可无,一般均有

六、GET请求头报文解释说明

-------------------请求行---------------------
GET / HTTP/1.1    # GET请求方式 请求资源路径 HTTP协议版本
-------------------请求头---------------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9     # 可接受的数据内容类型
Accept-Encoding: gzip, deflate, br     # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9     #可接受的语言
Connection: keep-alive    # 和服务端保持长连接
Cookie: ISSW=1; ISSW=1;……   # 登录用户的身份标识,用来保存用户身份信息
Host: www.baidu.com    # 服务器的主机地址和端口号,默认是80
Referer: https://www.baidu.com/s?ie=utf-……   # 当前访问用户来源,服务器用来判断统计用户来源
Sec-Fetch-Dest: document   # 表示请求的目的地,即如何使用获取的数据,指明客户端请求的目的,期望需要的资源类型
Sec-Fetch-Mode: navigate   # 请求的模式,表示这是一个浏览器的页面切换请求
Sec-Fetch-Site: same-origin   # 请求发起者的来源与目标资源来源之间的关系,此处表示发起和目标站点源完全一致
Upgrade-Insecure-Requests: 1    # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36     # 用户代理,也就是客户端的名称;用户浏览器信息
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"  # 用来替代user-agent,可以防止泄露浏览器详细信息
sec-ch-ua-mobile: ?0   # 是否是移动端用户
sec-ch-ua-platform: "Windows"   # 表示操作系统名称
--------------------空行---------------------

七、POST请求头报文解释说明

------------------请求行--------------------
POST /v2/api/?login HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本
------------------请求头--------------------
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0   # 缓存控制,多长时间不访问服务器,该响应包含对象的过期时间
Connection: keep-alive   # 和服务端保持长连接
Content-Length: 4737    # 消息实体的传输长度,报头以外的内容长度
Content-Type: application/x-www-form-urlencoded     # 告诉服务端请求的数据类型
Cookie: BIDUPSID=3A354E1289486ED85E4D2B9B42743E6E; ……
Host: passport.baidu.com # 服务器的主机地址和端口号,默认是80
Origin: https://www.baidu.com   # 当前请求来源于哪个站点
Referer: https://www.baidu.com/s?ie=utf-
Sec-Fetch-Dest: iframe
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-site
Sec-Fetch-User: ?1   # 导航请求是否由用户激活触发(鼠标点击/键盘),1为是,0为不是
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 # 客户端的名称
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
-------------------空行---------------------
-------------------请求体-------------------
username=admin&password=admin # 请求参数

八、响应报文解释说明

  • http响应报文组成:响应行、响应头、空行、响应体
  • 响应行组成:http协议版本、状态码、状态描述
  • 状态码
    • 200:请求成功
    • 307:重定向
    • 400:错误请求,请求地址或参数有误
    • 404:请求资源在服务器不存在
    • 500:服务器内部源代码出现错误
-------------------响应行/状态行------------------
HTTP/1.1 200 OK   # HTTP协议版本 状态码 状态描述
----------------------响应头----------------------
Bdpagetype: 3
Bdqid: 0xd604643700000bcc
Cache-Control: private
Ckpacknum: 2
Ckrndstr: 700000bcc
Connection: keep-alive    # 和客户端保持长连接
Content-Encoding: br
Content-Type: text/html;charset=utf-8     # 内容类型
Date: Tue, 18 Oct 2022 02:55:01 GMT    # 服务端的响应时间
Server: BWS/1.1      # 服务器名称及其版本号
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BD_CK_SAM=1;path=/
Set-Cookie: PSINO=7; domain=.baidu.com; path=/
Set-Cookie: BDSVRTM=28; path=/
Set-Cookie: H_PS_PSSID=36561_37559_37520_36921_36884_36786_37538_37498_37581_26350_37364_37464; path=/; domain=.baidu.com; Secure; SameSite=None
Strict-Transport-Security: max-age=172800   #要求客户端禁用HTTP协议,尝试后续都通过HTTPS协议进行通信,常见于HTTPS协议的网站
Traceid: 1666061701046251853815421561211409402828
Vary: Accept-Encoding
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked   # 发送给客户端内容不确定内容长度,发送结束的标记是0\r\n, Content-Length表示服务端确定发送给客户端的内容大小,但是二者只能用其一
----------------------空行------------------------
----------------------响应体----------------------
<!DOCTYPE html><html lang=“en”> …</html> # 响应给客户端的数据

学习导航:http://xqnav.top/ 

有关http协议、URL、GET/POST请求报文及响应报文的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  3. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  4. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  5. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  6. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  7. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  8. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  9. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  10. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

随机推荐