質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。

解決済

HTTPのバージョン違いによる ERR_SPDY_PROTOCOL_ERROR

crescens
crescens

総合スコア9

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。

2回答

0評価

1クリップ

7110閲覧

投稿2018/01/24 02:23

編集2018/01/29 05:49

前提・実現したいこと

PHPのcURLでWeb APIを叩いて出力結果を表示したいのですが、
プログラムを実行するサーバ(以下A)とWeb API提供元(以下B)に
HTTPのバージョンの違いがあるのでGoogle Chrome で以下のエラーが発生します。

発生している問題・エラーメッセージ

POST https://*** net::ERR_SPDY_PROTOCOL_ERROR

(A)がHTTP2導入済み、(B)がHTTP2未導入です。(A)のHTTP2をオフにすると、エラーは発生しません。
HTTP2をオフにする以外の対処法がありましたらご教授ください。

ソースコード

PHP

<?php $url = "(B)のURL"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); $result = curl_exec( $ch ); curl_close(); echo $result; ?>

(A)のサーバ環境

OS:CentOS 7.4
Webサーバ:nginx 1.13.8
SSL:OpenSSL 1.0.2k
他:PHP 7.2、cURL 7.57.8

1/29追記

(A)のnginxの設定

■nginx.conf

conf

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; resolver 127.0.0.1; keepalive_timeout 65; #gzip on; brotli on; server_tokens off; add_header X-Frame-Options SAMEORIGIN; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options nosniff; include /etc/nginx/conf.d/vhost.conf; #include /etc/nginx/conf.d/*.conf; }

■conf.d/vhost.conf

conf

server { listen 80 default_server; listen [::]:80 default_server; server_name example.com; root /var/www/html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log main; location / { index index.html index.htm index.php; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ .php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include fastcgi_params; } include ssl.conf; }

■conf.d/ssl.conf

conf

# # conf.d/ssl.conf # #listen 443 ssl http2; listen 443 ssl; ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains' always; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA"; ssl_stapling on; ssl_stapling_verify on; if ($scheme != "https") { return 301 https://$host$request_uri; } ssl_certificate /etc/pki/tls/certs/2017.crt; ssl_certificate_key /etc/pki/tls/private/2017.key; ssl_trusted_certificate /etc/pki/tls/certs/2017.intermediate;

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTTP2

HTTP2は、Hypertext Transfer Protocolのバージョンの1つでWWWで用いられます。接続を多重化し複数のリクエスト処理でき、HTTP1.1との互換性を持たせています。